【问题标题】:Time outs in asp.net web config settings and securityasp.net web 配置设置和安全超时
【发布时间】:2014-04-05 22:06:04
【问题描述】:

我正在研究 ASP.NET 中的表单身份验证,但遇到了示例代码中的各种超时设置。在 web.config 本身中指定了两个超时。一种是 sessionState timeout="30" 并且在身份验证设置下 forms 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);

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

【问题讨论】:

    标签: c# asp.net .net


    【解决方案1】:

    尽可能多地使用谷歌,你会尽快学会这个。

    然而 SessionState 超时用于会话时间,即会话将持续多长时间。

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

    【讨论】:

      【解决方案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 之前超时 - 它们仍然经过身份验证,但它们的所有会话变量都消失了,并且如果您在检查空值和其他因缺少会话而导致的情况时不遵守纪律,可能会导致您的网站出错.

      如果 Authentication 在会话之前超时,那么他们的所有会话变量仍然存在,但他们将无法访问受保护的资源,直到他们重新登录。

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

      如果验证超时,用户将无法访问它所保护的页面,并且会话的状态是无关紧要的。

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

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

      【讨论】:

      • 非常感谢您的解释。那么你是说将超时设置为表单 loginUrl="Login.aspx" timeout="30" 并在 FormsAuthenticationTicket 中添加 DateTime.Now.AddMinutes(40) 相同吗?
      • @VishnuY :第一件事将 (loginUrl="Login.aspx" timeout="30") 将 login.aspx 页面的身份验证超时设置为 30 分钟,但是 FormsAuthentication Ticket 是不同的概念。如果表单身份验证票是手动生成的,则票的超时属性将覆盖配置文件中设置的值。通读此链接 (support.microsoft.com/kb/910443),我相信您会明白我想要达到的目标。
      • 正在寻找这么好的文章。
      【解决方案3】:

      Forms Authentication Timeout 仅与用户的身份验证有关,它决定了用户被识别并保持身份验证的时间,以防任何缺乏不活动的情况,并且 Session 超时通常处理存储在服务器上的缓存数据(可以在内存、SqlServer 等),并指示在任何不活动的情况下保留用户会话的时间。

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

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

      简单地说:根据身份验证超时值,用户可能/可能不会保持身份验证。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-14
        • 1970-01-01
        相关资源
        最近更新 更多