在幕后,您可能两次设置相同的 cookie。Firefox 和 IE 可能在选择保留哪一个方面有所不同。ASP.NET 喜欢在许多 Web 应用程序中自动设置“guid”cookie。通过选择该名称,您必然会在自动逻辑和您自己的逻辑之间产生张力。查看正在发生的事情的最佳方法是将Live HTTP Headers加载项加载到 Firefox。它将允许您准确查看发送给最终用户的 cookie 命令。你也可以强制一个类似的问题来重新创建它:
HttpCookie hc = new HttpCookie("testcookie", "xyz");
hc.Expires = DateTime.Parse("12/12/2010");
Response.Cookies.Add(hc);
hc = new HttpCookie("testcookie", "abc");
Response.Cookies.Add(hc);
Set-Cookie
这会产生一个带有两个调用的 HTTP 标头:
Set-Cookie: testcookie=xyz; expires=Sun, 12-Dec-2010 07:00:00 GMT; path=/
Set-Cookie: testcookie=abc; expires=Sun, 12-Dec-2010 07:00:00 GMT; path=/
从那里,由浏览器决定是第一个还是最后一个是最终值。如果两个浏览器的做法不同,您最终会遇到您描述的情况。安装 Live HTTP Headers 插件并寻找类似的东西。至少,您可能应该将“guid”视为您应该在 ASP.NET 表单应用程序中使用的 cookie 名称。
如果您绝对需要在多个地方设置相同的 cookie,请先尝试找到它(如果不存在则创建一个新的)。这将确保您覆盖现有 cookie 的值,而不是创建另一个具有相同名称的 cookie。
HttpCookie hc = Response.Cookies["testcookie"];
if (null == hc) {
hc = new HttpCookie("testcookie");
Response.Cookies.Add(hc);
}
hc.Value = "xyz";