在开发Web应用程序时,会话管理和身份验证是两个核心概念。会话超时和表单身份验证超时是控制用户会话生命周期的重要设置。本文将探讨这两个概念,并解释如何在IIS中管理它们。
会话超时是指在没有任何请求的情况下,会话状态可以保持活跃的最长时间。如果超过这个时间限制,会话状态提供程序将终止会话。在某些情况下,用户可能希望将会话超时设置为60分钟。这听起来很简单,但实际上,仅仅设置会话超时是不够的。
Session.Timeout = SomeConfigurableValue
上述代码设置了会话超时,但这只是解决方案的一部分。
表单身份验证超时用于指定表单身份验证会话的有限生命周期。如果发出了持久的表单身份验证cookie,超时属性也用于设置持久cookie的生命周期。
Dim authTicket As New FormsAuthenticationTicket(
1,
crlLogin.UserName,
DateTime.Now,
DateTime.Now.AddMinutes(SomeConfigurableValue),
isCookiePersistent,
Nothing)
这段代码设置了表单身份验证票证的超时。然而,这仍然不是完整的解决方案。
在IIS中,有两种主要方式可以管理会话状态:1) In Process(进程内)或2) Out of Process(进程外)。如果网站设置为In Process存储会话状态,这意味着会话状态存储在工作进程(w3wp.exe)中。在IIS中有一个Idle Timeout属性,默认设置为20分钟。如果网站20分钟内没有任何活动,工作进程将被回收,同时也会清除所有会话,因为网站管理会话状态是在进程内进行的。
用户ABC在下午2:00登录,执行了一些操作,直到下午2:50才再次尝试执行操作。用户XYZ在下午2:10登录并执行了一些操作。然后用户XYZ在下午2:25和2:40执行了其他操作。当用户ABC在下午2:50尝试查看用户帐户时,他们的会话仍然有效。
用户ABC在下午2:00登录,执行了一些操作,直到下午2:50才再次尝试执行操作。用户XYZ在下午2:10登录,执行了一些操作,直到下午2:45才再次尝试执行操作。当两位用户尝试执行他们的第二次操作时,他们将被要求重新登录。这是因为IIS在服务器上回收了工作进程,因为工作进程已经空闲了20分钟。
要解决这个问题,可以采取一些措施,但答案并不简单。如果只是增加Idle Timeout属性,这可能会对环境产生影响。还有一种选择是将会话状态存储在进程外,这取决于如何决定管理它。
调整Idle Timeout属性可能会影响环境性能,因为它可能会导致资源浪费。在决定是否调整此属性之前,需要仔细考虑应用程序的需求和服务器的负载。