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

Jez*_*Jez 6 asp.net session forms-authentication

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

我的问题是,为什么表格认证超时比会话超时更长?事实上,在默认情况下,web.config中设置窗体身份验证的超时时间为长.

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

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

为什么场景1)会更加可取?我错过了什么吗?

Yiğ*_*ner 5

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

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

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

这样您就可以在一个地方处理过期的Session.