表单身份验证超时与sessionState超时
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表单身份验证超时与sessionState超时相关的知识,希望对你有一定的参考价值。
我有关于网站会话超时的代码。在web.config中,我遇到了这段代码。
<authentication mode="Forms">
<forms loginUrl="~/Auth/SignOn.aspx" timeout="40" slidingExpiration="true" />
</authentication>
<sessionState timeout="30" />
有谁知道一个先于另一个先例,以及它们是如何不同的。谢谢。
他们是不同的东西。表单身份验证超时值设置身份验证cookie设置为有效的时间(以分钟为单位),这意味着,在value
分钟数后,cookie将过期,用户将不再进行身份验证 - 它们将被重定向到自动登录页面 - 。 slidingExpiration=true
值基本上表示在每次发出请求后,计时器都会重置,只要用户在超时值内发出请求,它们就会继续进行身份验证。如果设置slidingExpiration=false
,则无论用户是否在超时值内发出请求,身份验证cookie都将在value
分钟后过期。
SessionState
超时值设置会话状态提供程序在特定会话中保存内存(或正在使用的任何后备存储,SQL Server,OutOfProc等)中的数据所需的时间。例如,如果使用示例中的值将对象放入Session中,则此数据将在30分钟后删除。用户可能仍然经过身份验证,但会话中的数据可能不再存在。每次请求后,Session Timeout
值始终会重置。
slidingExpiration = true值基本上表示在每次发出请求后,重置计时器,只要用户在超时值内发出请求,他就会继续进行身份验证。
这是不正确的。只有超时的一半时间过去,才会重置身份验证cookie超时。
例如,参见https://support.microsoft.com/de-ch/kb/910439/en-us或https://itworksonmymachine.wordpress.com/2008/07/17/forms-authentication-timeout-vs-session-timeout/
据我所知,他们是彼此独立的。通过保持会话超时小于或等于身份验证超时,您可以确保在身份验证超时后不会保留任何特定于用户的会话变量(如果这是您关注的问题,我认为这是正常的题)。当然,您必须在注销时手动处理会话变量的处理。
这是一个体面的回答,可以回答你的问题,或者至少指出你正确的方向:
不同之处在于,一个(表单超时)与验证用户有关,而另一个(会话超时)与缓存数据存储在服务器上的时间有关。所以它们是非常独立的东西,所以一个不优先于另一个。
<sessionState timeout="2" />
<authentication mode="Forms">
<forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
</authentication>
这个配置每隔两分钟就会把我发送到登录页面,这似乎是对早期答案的争议
对于任何绊倒这个问题的人,请参阅MS的这个文档 - 它有关于FormsAuthentication Timeout设置的非常好的细节。
该文档详细解释了bmode在接受的答案中所做的评论 - 关于持久性Cookie(会话与过期)
以上是关于表单身份验证超时与sessionState超时的主要内容,如果未能解决你的问题,请参考以下文章
代码中的.net Access Forms身份验证“超时”值