我想在浏览器关闭时使FormsAuthentication 的Cookie失效。 (我希望它像PHP会话一样工作)
这是我的Auth代码,位于Model(非控制器)中。
模型/ Auth.cs
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
model.UserId,
DateTime.Now,
DateTime.Now.AddDays(1),
true,
model.UserId +" "+reader["lastname"],
FormsAuthentication.FormsCookiePath);
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
if (ticket.IsPersistent)
{
cookie.Expires = ticket.Expiration;
}
HttpContext.Current.Response.Cookies.Add(cookie);
的Web.config
<authentication mode="Forms">
<forms name="user" timeout="60" loginUrl="~/Auth/login" path="/"></forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
还有一个问题是,有2次设置cookie超时,
在票证中,
DateTime.Now.AddDays(1),
并在Web.config文件中进行身份验证
<forms name="user" timeout="60" loginUrl="~/Auth/login" path="/"></forms>
它们有多么不同,哪一个会对实际的过期cookie产生影响?
有人知道,请告诉我。
谢谢!
答案 0 :(得分:9)
浏览器关闭时,您无法使Cookie过期。但是,你可以使cookie非持久化,这意味着它不会保存cookie,因此当你打开一个新的浏览器时,它将有一个新的cookie(但是,请注意,大多数浏览器缓存非持久性的方式)带有标签的cookie,必须关闭整个浏览器才能清除它。
关于第二个问题,如果您没有指定超时,则使用web.config条目。
答案 1 :(得分:0)
jQuery unload事件可用于检测浏览器关闭。
但是在以下情况下也会触发此事件:用户单击链接以离开页面,或在地址栏中键入新URL。前进和后退按钮将触发事件。即使页面重新加载也将首先创建卸载事件。
Bind an event handler to the "unload" JavaScript event.
回答你的第二个问题,你在代码中设置的超时覆盖了web.config条目。