身份验证会话在ASP.NET MVC上过期

时间:2017-02-16 16:13:35

标签: asp.net asp.net-mvc authentication

我想将用户登录到ASP.NET MVC站点,会话很快就会过期,只需几分钟。 身份验证在一行代码中完成:

@clients = Client.between_fields(params[:date], :start_date, :final_date)
# SELECT * FROM clients WHERE ('2017-02-16 00:00:00' BETWEEN start_date AND final_date)

然后我在Web.config:

authProvider.Authenticate(model.UserName, model.Password)

并在服务器上的IIS上设置300分钟。

有什么问题?

1 个答案:

答案 0 :(得分:1)

确保您的sessionState timeout值与forms timeout匹配:

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

您还需要将应用程序池的Idle Time-out参数更改为所需的身份验证超时,以避免应用程序池过早回收,从而丢失会话。

此参数可在以下位置找到:

  

IIS - 应用程序池 - 相关应用程序池的高级设置。

参考文献:

如果您不想更改此参数(*),解决方案是使用会话状态的StateServer模式。此模式使用服务来存储会话而不是具有In-Process模式的内存。它具有在应用程序池被回收时不会丢失会话的优点。它也很容易配置:

<system.web>
    <sessionState mode="StateServer"
       stateConnectionString="tcpip=loopback:42424"
       cookieless="false"
       timeout="300" />
</system.web>

(*)5分钟非常低。默认值为20分钟。因此,如果使用StateServer模式,我建议将其设置为至少默认值。

参考: