我想将用户登录到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分钟。
有什么问题?
答案 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
模式,我建议将其设置为至少默认值。
参考: