我正在研究ASP.NET中的表单身份验证,并且遇到了示例代码中的各种超时设置。在 web.config中,指定了两个超时。一个是 sessionState timeout =“30”并且在身份验证设置下 表单loginUrl =“Login.aspx”protection =“All”path =“/”timeout =“60”
除了这些,在登录页面C#中的FormsAuthenticationTicket另一次如下所示
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
tableObject.Rows[0]["UserName"].ToString(),
DateTime.Now,
DateTime.Now.AddMinutes(40),
true,
"AuthenticatedUser",
FormsAuthentication.FormsCookiePath);
这些超时如何实际运作以及确保对页面提供良好保护的首选设置是什么?
答案 0 :(得分:2)
HttpSessionState.Timeout属性获取并设置会话状态提供程序终止会话之前请求之间允许的时间(以分钟为单位)。 可以使用sessionState配置元素的timeout属性在应用程序的Web.config文件中设置Timeout属性,也可以使用应用程序代码直接设置Timeout属性值。
<configuration>
<system.web>
<sessionState
mode="InProc"
cookieless="true"
timeout="30" />
</system.web>
</configuration>
每当新用户访问网站时,会话就会启动,无论他们是否是匿名用户。身份验证与Session几乎没有关系。
另一方面,身份验证超时(在身份验证设置下)是身份验证Cookie在用户浏览器上有用的时间。一旦cookie过期,他们必须重新进行身份验证才能访问站点上受保护的资源。
<system.web>
<authentication mode="Forms">
<forms loginUrl="Login.aspx"
protection="All"
timeout="30"
name=".ASPXAUTH"
path="/"
requireSSL="false"
slidingExpiration="true"
defaultUrl="default.aspx"
cookieless="UseDeviceProfile"
enableCrossAppRedirects="false" />
</authentication>
</system.web>
因此,如果Session在Authentication cookie之前超时 - 它们仍然经过身份验证,但是它们的所有会话变量都会消失,并且如果您在检查由于缺少会话而导致的空值和其他条件时没有受到约束,则可能会导致您的网站出错
如果身份验证在会话之前超时,那么它们的所有会话变量仍然存在,但在重新登录之前,它们将无法访问受保护的资源。
如果您的会话在20分钟后超时,您的会话变量将会丢失。但是用户可以访问受身份验证保护的页面。
如果身份验证超时,则用户无法访问其保护的页面,并且会话状态无关紧要。
我只想补充一点,IIS在应用程序池级别存在另一个重要的超时设置。 IIS将在达到指定的空闲时间后重新启动池,以便使分配的资源空闲。您应该确保此池空闲超时始终大于上述两个超时,否则无论会话或表单超时设置为什么,您都将收到错误
这个东西非常简单,您可以在MSDN上找到更多相关内容。
答案 1 :(得分:1)
表单身份验证超时仅与用户身份验证相关,它决定用户被识别多长时间并在任何不活动的情况下保持身份验证,并且会话超时通常处理存储在服务器上的缓存数据(可以是内存,SqlServer等..),并指示在任何不活动的情况下保留用户会话的时间。
当用户点击网站时,会为该用户创建一个会话。该用户可能是匿名的或经过身份验证的。
使用表单身份验证(假设使用Cookie)时,在指定的timeOut
值之后,Cookie将过期,并且不再对用户进行身份验证。但是,您可能已在经过身份验证的用户的会话中存储了数据,但会话数据将在达到会话超时值时从服务器中删除。
简单地说:用户可能/可能不会保持身份验证,具体取决于身份验证超时值。
会话中相同用户的特定数据(例如背景主题)可能会/可能不会保留在会话中,具体取决于会话超时值。
同样,当不使用身份验证表单时,您仍然可以在匿名用户的会话中存储数据。用户可以关闭他的浏览器(意味着不再检查您的网站),当达到会话超时值时,会话数据将再次从服务器中删除。
答案 2 :(得分:0)
尽可能多地使用谷歌,您将尽快了解这一点。
然而 SessionState超时用于会话时间,即会话将持续多长时间。
当您使用FormAuthetication登录时使用FormAuthentication超时,即此时设置的时间用户将在此特定时间闲置时注销