我正在查看关于网站会话超时的代码。在web.config文件中,我找到了这段代码。
<authentication mode="Forms">
<forms loginUrl="~/Auth/SignOn.aspx" timeout="40" slidingExpiration="true" />
</authentication>
<sessionState timeout="30" />
有人知道它们之间是否有优先顺序以及它们的区别吗?谢谢。
我正在查看关于网站会话超时的代码。在web.config文件中,我找到了这段代码。
<authentication mode="Forms">
<forms loginUrl="~/Auth/SignOn.aspx" timeout="40" slidingExpiration="true" />
</authentication>
<sessionState timeout="30" />
有人知道它们之间是否有优先顺序以及它们的区别吗?谢谢。
它们是不同的东西。Forms Authentication Timeout值设置身份验证cookie有效的时间,即在value
分钟后,cookie将过期,用户将不再被认证,会自动重定向到登录页面。 slidingExpiration=true
的值基本上表示只要用户在超时值内发出请求,他们将继续被认证(更多细节here)。如果设置slidingExpiration=false
,则无论用户是否在超时值内发出请求,身份验证cookie都将在value
分钟后过期。
SessionState
超时值设置了Session State提供程序必须在内存中(或使用的任何后备存储,如SQL Server、OutOfProc等)保存特定会话数据的时间(以分钟为单位)。例如,如果您使用示例中的值将对象放入Session中,则此数据将在30分钟后被删除。用户可能仍然经过身份验证,但Session中的数据可能不再存在。建议每次请求后重置这里和这里的Session Timeout
值(可能需要cookie;与无cookie相对比)。
区别在于一个(表单超时)与用户身份验证有关,另一个(会话超时)与服务器上缓存数据的存储时间有关。因此,它们是非常独立的事物,所以一个不会优先于另一个。
<sessionState timeout="2" />
<authentication mode="Forms">
<forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
</authentication>
这个配置每两分钟就会把我重定向到登录页面,这似乎与之前的答案相违背。
对于偶然发现这个问题的任何人,请参考微软的这份文档——它详细介绍了FormsAuthentication超时设置的细节。
这篇文档详细解释了Accepted Answer中bmode所做评论的内容——关于持久Cookie(Session vs Expires)。
两者之间的区别在于一个(表单超时)与验证用户有关,而另一个(会话超时)与服务器上缓存数据的存储时间有关。因此,它们是非常独立的事物,因此一个不会优先于另一个。