7

我想在浏览器关闭时使 FormsAuthentication 的 cookie 过期。 (我希望它像 PHP 会话一样工作)

这是位于模型(不是控制器)中的我的身份验证代码。

模型/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);

网页配置

<authentication mode="Forms">
    <forms name="user" timeout="60" loginUrl="~/Auth/login" path="/"></forms>
</authentication>
<authorization>
    <deny users="?" />
</authorization>

还有一个问题是,设置cookie超时有2次,

在机票上,

DateTime.Now.AddDays(1),

并在 Web.config 文件中进行身份验证

<forms name="user" timeout="60" loginUrl="~/Auth/login" path="/"></forms>

它们有多大不同,哪一个会影响实际的过期 cookie?

有谁知道,请指教。

谢谢!

4

2 回答 2

9

当浏览器关闭时,您不能使 cookie 过期。但是,您可以使 cookie 成为非持久性的,这意味着它不会保存 cookie,因此当您打开新浏览器时,它将有一个新的 cookie(但是请注意,大多数浏览器缓存非持久性的方式带有标签的 cookie,必须关闭整个浏览器才能将其清除)。

至于您的第二个问题,如果您不指定超时,则使用 web.config 条目。

于 2012-05-24T18:37:08.740 回答
0

jQuery unload 事件可用于检测浏览器关闭。

但是在以下情况下也会触发此事件:用户单击链接离开页面,或在地址栏中键入新 URL。前进和后退按钮将触发事件。即使页面重新加载也会首先创建一个卸载事件。

将事件处理程序绑定到“卸载”JavaScript 事件。

回答您的第二个问题,即您在代码中设置的超时,并覆盖 web.config 条目。

于 2012-05-24T18:49:11.533 回答