为啥 ASP.NET MVC 中的超时时间很短?

Posted

技术标签:

【中文标题】为啥 ASP.NET MVC 中的超时时间很短?【英文标题】:Why really short timeout in ASP.NET MVC?为什么 ASP.NET MVC 中的超时时间很短? 【发布时间】:2011-04-29 01:24:14 【问题描述】:

我有一个 MVC 2 应用程序,其中超时设置为 2880(我理解为分钟,但即使是几秒钟也有问题):

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

现在这应该意味着 48 小时,或至少 48 分钟(如果值是秒)。但是用户在不活动几分钟后就会退出...

这是为什么呢?任何帮助表示赞赏!

【问题讨论】:

你用不同的浏览器试过了吗?我曾经在一个孤立的用户使用 Firefox 浏览时看到过这个问题。 是的,问题出现在 Firefox、Chrome、IE 和 Safari... 这个blog post 谈到了类似的情况;也许该设置在代码中的某处被覆盖。 嗯,我检查了FormsAuthenticationTicket代码,有一个sn-p,但它完全在不同的Controller中,所以它应该与它没有任何关系...... 更多信息:当我在开发过程中在本地主机上尝试时不会发生注销,仅在虚拟主机上。我已经尝试联系支持人员,但他们似乎不知道问题出在哪里。他们建议将此添加到我的 web.config 中: 但这根本没有帮助...... 【参考方案1】:

2880 以分钟为单位。如果您添加slidingExpiration="true",它将自动注销。请参阅下面的示例。

 <forms loginUrl="~/Account/LogOn" timeout="2880" slidingExpiration="true"/>

【讨论】:

这是不对的。它不会自动注销。当 SlidingExpiration 设置为 true 时,身份验证 cookie 有效的时间间隔将重置为过期 Timeout 属性值。【参考方案2】:

经过大量的谷歌搜索终于找到了答案......

您必须在 web.config 文件中设置自定义机器密钥。我使用了这个生成器:

http://aspnetresources.com/tools/machineKey

这似乎与网络主机上的“回收”有关,如果我理解正确的话,这会导致用户被注销。

不管怎样,它现在可以正常工作了!

【讨论】:

哇,这是非常有用的信息。非常感谢!我遇到了同样的问题,它解决了。 为什么会这样? 链接不再活跃,你能在这里解释一下吗?其实我面临同样的问题。我为表单身份验证提供了超时时间为 timeout="2880" slipExpiration="true" 和 sessionState 超时时间为 1440。但会话仍然在 10-15 分钟后过期。可能是什么问题。

以上是关于为啥 ASP.NET MVC 中的超时时间很短?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 ASP.NET MVC 登录用户超时?

为啥我的 ASP.NET MVC 站点中的此 AJAX 请求会触发预检检查?

为啥在 asp.net mvc 中的公共路由之前先映射特殊路由?

为啥 ASP.NET MVC 中的本地 URL 的 Url.IsLocalUrl 为 false?

如何将 MVC5 RedirectResult () 重定向到 Asp.net 中的整页?

为啥 Bootstrap 不允许我在 ASP.NET MVC 页面中的下拉菜单上设置边距?