我正在创建一个 HttpCookie,只设置名称和值而不是 expires 属性,然后将其添加到响应中。很简单。cookie 按预期创建(但不持久)。问题是当会话由于某种原因发生变化时(比如网站被重建,或者我在调试时重建了我的应用程序)然后 cookie 仍然存在。我希望 cookie 仅对创建它的原始会话有效。
根据 MSDN,它说:“如果您没有为 cookie 指定过期限制,则 cookie 不会持久保存到客户端计算机,并且会在用户会话过期时过期。”
我想我不确切知道“会话过期”包含什么。我认为 cookie 会在会话过期 20 分钟后被删除。但是,如果创建它的会话由于各种原因不再存在,是否应该删除 cookie?我唯一一次看到 cookie 被删除是当用户关闭所有浏览器窗口并打开一个新窗口时。
如果这一切都是真的,我可能必须将原始会话 ID(“ASP.NET_SessionId”)存储在 cookie 中,然后根据当前会话 ID 检查它,如果它们不同,则删除 cookie 或创建一个新的.
这是代码(我的 cookie 和 MSDN 示例中的唯一区别是我在 cookie 中存储了多个值):
private void SaveValuesToCookie(string[] names, string[] values)
{
HttpCookie cookie = new HttpCookie("MyCookie");
for (int i = 0; i < names.Length; i++)
{
string name = names[i];
cookie.Values[name] = values[i];
}
Response.Cookies.Add(cookie);
}
private string GetValueFromCookie(string name)
{
HttpCookie cookie = Request.Cookies["MyCookie"];
if (cookie == null)
return null;
return cookie.Values[name];
}