C# asp.net web配置设置和安全性中的超时

C# asp.net web配置设置和安全性中的超时,c#,asp.net,.net,C#,Asp.net,.net,我当时正在研究ASP.NET中的表单身份验证,遇到了一个示例代码中的各种超时设置。在web.config本身中指定了两个超时。一个是sessionState timeout=“30”并处于身份验证设置下 表单loginUrl=“Login.aspx”protection=“All”path=“/”timeout=“60” 除此之外,在登录页面C#中,表单将在另一时间显示身份验证票证,如下所示 FormsAuthenticationTicket ticket = new FormsAuthenti

我当时正在研究ASP.NET中的表单身份验证,遇到了一个示例代码中的各种超时设置。在web.config本身中指定了两个超时。一个是sessionState timeout=“30”并处于身份验证设置下 表单loginUrl=“Login.aspx”protection=“All”path=“/”timeout=“60”

除此之外,在登录页面C#中,表单将在另一时间显示身份验证票证,如下所示

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                       1,
                       tableObject.Rows[0]["UserName"].ToString(),
                       DateTime.Now,
                       DateTime.Now.AddMinutes(40),
                       true,
                       "AuthenticatedUser",
                       FormsAuthentication.FormsCookiePath);

这些超时实际上是如何工作的,以及确保对页面进行良好保护的首选设置是什么?

尽可能多地使用谷歌,您将尽快了解这一点

然而 SessionState timeout用于会话时间,即会话的生存时间


FormAuthentication Timeout在您使用FormAuthentication登录时使用,即在此时设置的时间用户在此特定时间空闲时将注销

HttpSessionState.Timeout属性获取并设置会话状态提供程序终止会话之前请求之间允许的时间量(以分钟为单位)。 可以使用sessionState配置元素的Timeout属性在Web.config文件中为应用程序设置Timeout属性,也可以直接使用应用程序代码设置Timeout属性值

<configuration>
  <system.web>
    <sessionState 
      mode="InProc"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

每次新用户访问网站时,会话都会启动,无论他们是否匿名。身份验证与会话关系不大

另一方面,身份验证超时(在“身份验证设置”下)是身份验证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>

因此,如果会话在身份验证cookie之前超时,它们仍然经过身份验证,但它们的所有会话变量都会消失,如果您没有严格检查空值和丢失会话导致的其他情况,则可能会在您的网站中导致错误

如果身份验证在会话之前超时,则其所有会话变量仍将存在,但在再次登录之前,它们将无法访问受保护的资源

如果会话在20分钟后超时,会话变量将丢失。但是用户可以访问受身份验证保护的页面

如果身份验证超时,则用户无法访问其保护的页面,并且会话的状态与此无关

我只想补充一点,IIS中的应用程序池级别存在另一个重要的超时设置。IIS将在达到指定的空闲超时后重新启动池,以便释放分配的资源。您应该确保此池空闲超时始终大于上面提到的两个超时,否则无论会话或窗体超时设置为什么,都会出现错误


这些内容非常琐碎,您可以在MSDN上找到更多信息。

表单身份验证超时仅与用户身份验证相关,它决定在缺少不活动的情况下识别用户并保持身份验证的时间,会话超时通常处理存储在服务器上的缓存数据(可以在内存、SqlServer等中),并指示在任何不活动的情况下保留用户会话的时间

当用户访问网站时,会为该用户创建一个会话。该用户可以是匿名的,也可以是经过身份验证的

当使用表单身份验证(假设使用Cookie)时,在指定的
超时值之后,Cookie过期,用户不再进行身份验证。但是,您可能已经在会话中为经过身份验证的用户存储了数据,但当达到会话超时值时,会话数据将从服务器中删除

简而言之:根据身份验证超时值,用户可能会/可能不会保持身份验证。

会话中同一用户的特定数据(如背景主题)可能/可能不会保留在会话中,具体取决于会话超时值。


类似地,当不使用身份验证表单时,您仍然可以在会话中为匿名用户存储数据。用户可以关闭浏览器(意味着不再检查您的网站),当达到会话超时值时,会话数据将再次从服务器中删除。

非常感谢您的解释。那么您是否想将超时设置为forms loginUrl=“Login.aspx”timeout=“30”并添加DateTime。现在,FormsAuthenticationTicket中的.AddMinutes(40)是相同的?@VishnuY:第一件事是(loginUrl=“Login.aspx”timeout=“30”)会将login.aspx页面的身份验证超时设置为30分钟,但是FormsAuthentication票证是一个不同的概念。如果手动生成forms身份验证票证,票证的超时属性将覆盖配置文件中设置的值。通过此链接读取()我相信你会理解我的意图。我在寻找这么好的文章。