我正在研究 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/