我在Internet Explorer中遇到持久性cookie的问题,也就是说,我可以设置cookie,但不能使它们持久存在。我使用的是Internet Explorer 11,并尝试过“Internet选项”#34; - > "高级" - > "重置",但它没有帮助。
我已经写了这个测试代码:
class Program {
public static void Main(string[] args) {
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://+:7777/");
listener.Start();
ThreadPool.QueueUserWorkItem((o) = > {
while (listener.IsListening) {
ThreadPool.QueueUserWorkItem((c) = > {
HandleRequest(c as HttpListenerContext);
}, listener.GetContext());
}
});
Console.Write("Press any key to quit . . . ");
Console.ReadKey(true);
listener.Stop();
listener.Close();
}
static void HandleRequest(HttpListenerContext ctx) {
var cookie = ctx.Request.Cookies["TestCookie"];
if (cookie == null) {
Console.WriteLine("Setting cookie...");
var expiryDate = DateTime.UtcNow.AddDays(360);
ctx.Response.Headers["Set-Cookie"] = "TestCookie=some_value; Path=/; Expires=" + expiryDate.ToString("ddd, dd-MMM-yyyy H:mm:ss") + " GMT; HttpOnly";
} else {
Console.WriteLine("Cookie: " + cookie);
}
ReturnString(ctx, "OK");
}
protected static void ReturnString(HttpListenerContext ctx, String s) {
try {
byte[] buf = Encoding.UTF8.GetBytes(s);
ctx.Response.ContentLength64 = buf.Length;
ctx.Response.OutputStream.Write(buf, 0, buf.Length);
} catch (Exception e) {
} // suppress any exceptions
finally {
// always close the stream
ctx.Response.OutputStream.Close();
}
}
}
现在,当访问127.0.0.1:7777
时,我首先得到"设置cookie",然后" Cookie:TestCookie = some_value"在所有后续请求。在Chrome中,cookie是持久的(我可以关闭浏览器,重新启动它,然后仍然得到" Cookie:TestCookie = some_value"),但这在Internet Explorer中不起作用。也就是说,当使用IE时,我得到了"设置cookie"每次重新启动浏览器时第一次请求。所以cookie显然不再存在了。
这是为什么?难道我做错了什么?当然必须有一些方法在使用C#服务器在IE中设置持久性cookie?
答案 0 :(得分:0)
您可以将您的网站添加到IE Properties中的受信任区域吗?这听起来可能与安全设置有关。