【发布时间】:2015-08-27 05:31:15
【问题描述】:
我在 Internet Explorer 中存在持久性 cookie 的问题,即我可以设置 cookie,但无法使它们持久化。我使用的是 Internet Explorer 11,并尝试了“Internet 选项”->“高级”->“重置”,但没有帮助。
我已经写了这个测试代码:
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?
【问题讨论】:
标签: c# internet-explorer cookies