ASP.NET mvc auth 或 session 比设置的更快过期

ASP.NET mvc auth or session expires quicker than set

在我的 ASP.NET MVC5 website 中 web.config 的登录和会话超时如下:

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="~/Account/Login" slidingExpiration="true" timeout="60"/>
  </authentication>
  <sessionState mode="InProc" timeout="60"/>      
</system.web>

会话或身份验证仍然需要五分钟。我已联系我的虚拟主机提供商以增加 IIS 中的超时时间,他们在增加 IIS 中的超时时间后共享了一个 screenshot,但没有任何改变。知道为什么会这样。

首先,尝试在 Global.asax 中的 Session_Start 方法上设置会话超时:

void Session_Start(object sender, EventArgs e)
{
    Session.Timeout = 60;
}

注意:通过使用进程内会话状态,您的会话将清除每个 IIS 应用程序池回收,这些应用程序池在您的问题应用程序池中会在 5 分钟后回收。

如果上述尝试不起作用,并且您可以访问服务器的 IIS 管理,请执行以下步骤:

  1. 打开 IIS 管理器。
  2. Select 应用程序池 => [您的应用程序池名称] => Recycling/Advanced 设置。
  3. 启用 Regular time interval (minutes) 并将其设置为 60,然后应用您的更改。

如果您不能访问 IIS 管理器和 SQL 服务器配置,您可能想尝试基于数据库的会话状态管理而不是 InProc 模式(请参阅下面的 MSDN 参考资料) .

基于数据库的会话状态需要将模式属性更改为 SQLServer,例如:

<system.web>
    <sessionState mode="SQLServer" sqlConnectionString="Integrated Security=SSPI;Data Source=SERVERNAME;Initial Catalog=DATABASE" />
</system.web>

参考:

MSDN:https://msdn.microsoft.com/en-us/library/ms178586.aspx

Session expires too quickly in asp.net mvc4 application

这是 IIS 中 SystemIdleTime 变量的问题。我要求我的托管服务提供商将此值增加到 30 分钟并且成功了。

这表示当应用程序池在 30 分钟内没有请求时关闭时,我的所有会话变量都将被删除。该值将覆盖网站 web.cofig 中设置的会话超时。您可以将其设置为 0 以指示应用程序池永远不会关闭,然后您可以通过 web.config 控制会话的超时。我也觉得这个不错article