FormsAuthentication 的持久 cookie 超时

Posted

技术标签:

【中文标题】FormsAuthentication 的持久 cookie 超时【英文标题】:Persistent cookie timeout with FormsAuthentication 【发布时间】:2011-12-02 16:09:39 【问题描述】:

我正在创建一些“记住我”功能作为登录的一部分。

当我在登录过程中使用以下内容创建持久性 cookie 时:

FormsAuthentication.SetAuthCookie("someusername", true);

我的 Web.Config 如下所示:

<authentication mode="Forms">
  <forms loginUrl="~/sign-in" timeout="2880" />
</authentication>

在要求用户再次提供登录详细信息之前,cookie 的有效期是多久? 另外,设置持久性cookie时是否有/默认使用的时间长度是多少?

【问题讨论】:

【参考方案1】:

感谢这篇文章,我找到了我正在寻找的答案:

Dan Sellers's WebLog

他说的地方:

在 ASP.NET 2.0 中,持久化和基于会话的超时值 cookie 由&lt;forms/&gt;元素上的超时属性控制

所以在我的示例中,持久性 cookie 将在 48 小时内过期。

【讨论】:

这是从 .NET 1.1 到 2 的更改:“注意在 ASP.NET V1.1 下,无论超时属性的设置如何,持久 cookie 都不会超时。但是,从 ASP 开始。 NET V2.0,持久性 cookie 会根据超时属性超时。”很好的发现。应该注意的是,如果您在具有不同值的代码中创建身份验证票证,它将胜过 web.config 中的设置...如果您需要这种灵活性。 重要的部分是,如果你像我一样老,并且记得传递“true”作为第二个参数似乎让你永远登录,你是对的 - 它设置了 cookie 5 年。现在,如果您通过它并且不设置超时值,它默认为“30” - 仅 30 分钟。与 5 年相比大幅下降,即 【参考方案2】:

timeout 在您的 authentication 模块中被提及为:

<forms loginUrl="~/sign-in" timeout="2880" />

timeout="2880"。这个 2880 值以分钟为单位。因此,如果您将 2880 除以 60,您将得到 48 小时,这就是您问题的答案。用户必须在 48 小时期限届满后再次提供其登录凭据。

希望对您有所帮助。

【讨论】:

超时最大值? HttpSessionState.Timeout525,600 分钟(1 年)【参考方案3】:

我相信永久 cookie 是无限期有效的(当然,除非用户清除他们的浏览器 cookie)。 timeout 属性只是告诉表单身份验证保持会话活动多​​长时间。

看这里:

Cookie Confusion with FormsAuthentication.SetAuthCookie() Method

【讨论】:

区别:slidingExpiration vs time Expiration vs Persistent cookie?

以上是关于FormsAuthentication 的持久 cookie 超时的主要内容,如果未能解决你的问题,请参考以下文章

`FormsAuthentication.SignOut();` 不适用于 IIS `Windows Authentication` 选项已启用

FormsAuthentication.SetAuthCookie 方法登录

FormsAuthentication.SetAuthCookie 在 MVC 5 中不 [Authorize]

FormsAuthentication.SetAuthCookie

防止 FormsAuthentication 覆盖 WCF REST 中的响应状态

Cookie 与 FormsAuthentication.SetAuthCookie() 方法混淆