为什么设置表单身份验证超时超过会话超时?

时间:2012-10-08 11:38:24

标签: asp.net session forms-authentication

我想我理解ASP.NET的“会话”和“表单身份验证”之间的区别。 Session主要用于存储特定于该用户会话的信息(可能是搜索过滤器的状态),并且表单身份验证用于记住他们应该可以访问某些内容。

我的问题是,为什么表格认证超时比会话超时更长?实际上,默认情况下,web.config将表单身份验证的超时设置为更长。

以下是我看到的两个场景:

  1. 会话在表单身份验证之前超时。用户失去搜索过滤器之类的东西,虽然他们仍然可以看到安全页面,但事情可能看起来不同,各种事情可能会重置。此外,开发人员每次使用会话时都必须担心会话变为null
  2. 在会话之前表示身份验证超时。用户必须重新输入用户名和密码,但他们会回到他们所在的页面并且会话信息完好无损(除非它也超时)。开发人员只需要在一个地方担心会话null - 登录时 - 并且可以在必要时将其初始化。
  3. 为什么情景1)会更加可取?我错过了什么吗?

1 个答案:

答案 0 :(得分:5)

事情是会话超时是一个比另一个更关键的设置。将身份验证超时设置为很长时间不会影响Web应用程序的服务器资源。但是如果你将会话超时设置为很长时间,这可能会导致高额赌注下的内存问题。

你的陈述是正确的。作为开发人员,我更喜欢2比1.但是有一种简单的方法来处理会话过期。看看这个SO question。其中一个答案可以很好地解决会话到期问题。

protected void Session_Start(Object sender, EventArgs e)
{
    if (User.Identity.IsAuthenticated)
    {
        FormsAuthentication.SignOut();                         
        Response.Redirect("~/SessionEnd.aspx");
    }
}

这样您就可以在一个地方处理过期的会话。