c# - ASP.NET Web 配置设置和安全超时

标签 c# asp.net .net

我正在研究 ASP.NET 中的表单例份验证,并被示例代码中的各种超时设置所困扰。在web.config 本身中指定了两个超时。一种是 sessionState timeout="30" 并在身份验证设置下 表单loginUrl =“Login.aspx”保护=“全部”路径=“/”超时=“60”

除了这些之外,在登录页面C#中还有一次FormsAuthenticationTicket,如下所示

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

这些超时实际上是如何运作的?确保页面得到良好保护的首选设置是什么?

最佳答案

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

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

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

另一方面,身份验证超时(位于身份验证设置下)是身份验证 cookie 在用户浏览器上有效的时间量。一旦 cookie 过期,他们必须重新进行身份验证才能访问网站上 protected 资源。

<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 在身份验证 cookie 之前超时 - 它们仍然经过身份验证,但所有 session 变量都会消失,并且如果您不遵守检查空值和丢失 session 引起的其他条件的规定,可能会导致您的网站出现错误.

如果身份验证在 session 之前超时,则其所有 session 变量仍将存在,但在重新登录之前将无法访问 protected 资源。

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

如果身份验证超时,用户将无法访问其保护的页面,并且 session 状态无关。

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

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

关于c# - ASP.NET Web 配置设置和安全超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22170815/

相关文章:

c# - 设置 RadioButton 的值属性

C# DateTime 到长转换关闭一秒

c# - 如何解决这个僵局呢?

c# - 在 WPF 应用程序中使用手写笔或手指按下触摸屏上的按钮时出现异常

html - 在 IE8 中,背景出现在 Fieldset 的边界之外

c# - 发布同名 nuget 包时在 .net vNext 中引用本地项目

asp.net - 在 ASP.NET/IIS7 中本地模拟域

.net - 在从网络共享运行的应用程序的 UAC 提升提示上显示应用程序图标

.net - 如何制作一个 IEqualityComparer for (int*int) [] 进行结构比较?

c# - 通过 ODBC 传递 null