gpt4 book ai didi

asp.net - Session改变或无效时,HttpCookie不会被删除

转载 作者:行者123 更新时间:2023-12-02 16:06:33 25 4
gpt4 key购买 nike

我正在创建一个 HttpCookie,仅设置名称和值,而不设置过期属性,然后将其添加到响应中。够简单的。 cookie 按预期创建(但未保留)。问题是,当 session 由于某种原因发生变化时(比如网站被重建,或者我在调试时重建了我的应用程序),那么 cookie 就会保留下来。我希望 cookie 仅对创建它的原始 session 有效。

根据 MSDN 的说法:“如果您不指定 cookie 的过期限制,则 cookie 不会保留到客户端计算机,并且会在用户 session 过期时过期。”

我想我不太清楚“ session 过期”到底包含什么内容。我认为 20 分钟后 session 到期时 cookie 就会被删除。但是,如果创建 cookie 的 session 由于多种原因不再存在,是否应该删除 cookie?我唯一一次看到 cookie 被删除是当用户关闭所有浏览器窗口并打开一个新窗口时。

如果这都是真的,我可能必须将原始 session ID(“ASP.NET_SessionId”)存储在 Cookie 中,然后对照当前 session ID 进行检查,如果不同,则删除 Cookie 或创建一个新的。

这是代码(我的 cookie 与 MSDN 示例中的 cookie 之间的唯一区别是我在 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];
}

最佳答案

The only time I've seen the cookie get deleted is when the user closes all browser windows and opens a new one.

这正是 MSDN 的意思,它说 session 过期时 cookie 将被删除。不幸的是,我相信这在浏览器之间并不一致,所以它对任何人都没有多大用处。

您应该始终在 Cookie 上设置到期日期。

If this is all true, I may have to store the original session id ("ASP.NET_SessionId") in the cookie, then check it against the current session id, if they're different, then delete the cookie or create a new one.

我不想这么说,但这也不会帮助你。 .NET Framework 喜欢回收 session ID,因此您不能保证它会有所不同。

坏消息是,我建议您从架构的角度重新考虑您想要做的事情。

重新启动应用程序完全发生在服务器上; cookie 完全发生在客户端。虽然客户端将与服务器通信,但这纯粹是请求/响应关系,服务器无法将应用程序重新启动等事件传达给浏览器。

如果您想在某处存储一个仅在服务器 session 生命周期内有效的值,为什么不将其存储在 Session 中而不是存储在 Cookie 中?

关于asp.net - Session改变或无效时,HttpCookie不会被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3292886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com