Asp.Net MVC3 - FormsAuthentication,如何在浏览器关闭时使cookie过期?

时间:2012-05-24 18:33:05

标签: asp.net asp.net-mvc-3 authentication cookies

我想在浏览器关闭时使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产生影响?

有人知道,请告诉我。

谢谢!

2 个答案:

答案 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条目。