6

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

我的问题是,为什么希望表单身份验证超时时间长于会话超时时间?事实上,默认情况下,web.config 将表单身份验证的超时设置为更长

这是我看到的两种情况:

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

为什么情景 1) 会更受欢迎?我错过了什么吗?

4

1 回答 1

5

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

你的说法是对的。作为开发人员,我更喜欢 2 而不是 1。但是有一种简单的方法可以处理会话到期。看看这个SO question。其中一个答案对会话过期有很好的解决方案。

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

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

于 2012-10-08T13:47:31.013 回答