ASP.NET mvc auth或session会比set更快到期

时间:2016-10-05 06:35:22

标签: c# asp.net-mvc iis forms-authentication session-timeout

在我的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,但没有任何改变。不知道为什么会这样。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

  1. 打开IIS管理器。
  2. 选择应用程序池=&gt; [您的应用程序池名称] =&gt;回收/高级设置。
  3. 启用Regular time interval (minutes)并将其设置为60,然后应用您的更改。
  4. 如果您无法同时访问IIS管理器和在SQL Server配置中,您可能希望尝试基于数据库的会话状态管理而不是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

答案 1 :(得分:1)

IIS中的 SystemIdleTime 变量存在问题。我请求我的托管服务提供商将此值增加到30分钟并且它有效。

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