【问题标题】:Why set forms authentication timeout longer than session timeout?为什么将表单身份验证超时设置为长于会话超时?
【发布时间】:2012-09-28 15:48:49
【问题描述】:

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

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

这是我看到的两种情况:

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

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

【问题讨论】:

    标签: asp.net session forms-authentication


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 另外值得注意的是,在 Web 应用程序的一个类中进行 all Session 访问是一个非常好的主意,并让该类始终检查是否Session 为 null 并在必要时重新初始化它。
    猜你喜欢
    • 2010-12-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多