浏览器会话结束时 Cookie 过期
Posted
技术标签:
【中文标题】浏览器会话结束时 Cookie 过期【英文标题】:Cookie to Expire when Browser Session Ends 【发布时间】:2013-07-18 04:29:27 【问题描述】:我的研究表明,如果我创建了一个 cookie 并且没有设置过期日期,它会在浏览器关闭时过期。
所以我创建了一个这样的 cookie:
Response.Cookies.Set(new HttpCookie("MyKey", "X"));
但是当我关闭浏览器然后重新打开它时,下面的表达式等于 true:
Request.Cookies["MyKey"] != null
如何在浏览器会话结束时让 cookie 过期?
注意:就我的目的而言,使用静态数据而不是 cookie 似乎是理想的。但我的理解是,ASP.NET 可能会因多种原因重新启动,如果我丢失了此设置,这可能会从当前用户下拉出地毯。
【问题讨论】:
你想让服务器上的cookie在浏览器会话结束后过期吗?关闭浏览器后如何查看Request.Cookies["MyKey"]
的值?
我想要客户端的 cookie,而不是服务器。当浏览器重新打开并重新加载页面时,我会在浏览器关闭后检查 cookie 的值。
“它会自动加载之前打开的页面” - 我怀疑您的浏览器启用了某种形式的“重新加载我之前的位置”设置。启用后,退出浏览器时浏览器会话不会结束;所以退出浏览器不会触发cookie的删除。
是的,这是 Chrome 中的相关设置:support.google.com/chrome/answer/95421
***.com/questions/3737285/…的可能重复
【参考方案1】:
看来问题正如 Stober 所描述的那样。您可以通过将HttpCookie.Expires
属性设置为DateTime.MinDate
或根本不设置该属性来设置cookie 在浏览器会话结束时过期。
但是,至少使用 Chrome 的 从您离开的地方继续设置,浏览器会话似乎不一定会在浏览器关闭时结束。关闭然后重新打开时,Chrome 浏览器会从上次中断的地方继续,就好像会话从未结束一样。这包括在会话结束时继续使用设置过期的 cookie。
我在 FireFox 上尝试了相同的代码。关闭并重新打开浏览器会导致 cookie 过期,正如预期的那样。
所以虽然有一些通用规则,但最终这种行为完全取决于浏览器。
【讨论】:
【参考方案2】:您可以在下一个 Session_start
事件中看到这一点。如果您在全新会话开始时立即拥有经过身份验证的用户,那么您必须从陈旧的 cookie 中获取该信息。只需清空用户信息,让登录重定向处理其余的事情。
global.asax.cs
中的类似内容:
protected void Session_start()
// starting a session and already authenticated means we have an old cookie
var existingUser = System.Web.HttpContext.Current.User;
if (existingUser != null && existingUser.Identity.Name != "")
// clear any existing cookies
IAuthenticationManager authMgr = System.Web.HttpContext.Current.GetOwinContext().Authentication;
authMgr.SignOut("MyCookieType")
// manually clear user from HttpContext so Authorize attr works
System.Web.HttpContext.Current.User = new ClaimsPrincipal(new ClaimsIdentity());
代码可能会有所不同,具体取决于您对用户进行身份验证的方式
另见:
Expire cookie at end of session OR at specific time? ASP.Net delete/expire session cookies【讨论】:
【参考方案3】:只需将HttpCookie
实例的Expires
属性设置为DateTime.MinDate
,它就会在浏览器会话结束后过期。
然而,这实际上是不安全的方式用 cookie 保护某些东西,因为 cookie 实际上是永久有效的。 cookie 是否被丢弃取决于客户端实现。如果某些坏人拦截了您的 cookie,他们将永远拥有访问权限。
另请参阅:MSDN - Cookie.Expires
Property
【讨论】:
将过期日期设置为DataTime.MinDate
与完全不设置过期日期的效果完全相同。在 Chrome 中(至少在某些设置下),这意味着 cookie 在浏览器会话结束时不会过期。 (或者至少“浏览器会话”不会在浏览器关闭时结束。)以上是关于浏览器会话结束时 Cookie 过期的主要内容,如果未能解决你的问题,请参考以下文章