为什么要将表单身份验证超时时间设置为比会话超时时间更长?

7
我认为我理解了ASP.NET的“会话”和“表单身份验证”的区别。会话基本上用于存储特定于该用户会话的信息(例如搜索过滤器的状态),而表单身份验证用于记住他们应该访问某些内容。
我的问题是,为什么希望表单身份验证超时时间比会话超时时间更长?实际上,默认情况下,web.config将表单身份验证的超时时间设置得要< strong>长得多。
这里是我看到的两种情况:
1. 会话超时之前,表单身份验证超时了。用户丢失了搜索过滤器等东西,虽然他们仍然可以看到安全页面,但事情可能看起来不同并且各种东西可能会重置。此外,开发人员必须担心每次使用它时会话变成null。 2. 会话超时之后,表单身份验证超时了。用户必须重新输入用户名和密码,但他们可以回到他们原来的页面,并保留会话信息(除非也超时)。开发人员只需要担心Session在一个地方变成null - 在登录时 - 如果需要,可以在那里初始化。
为什么情况1)更受欢迎?我错过了什么吗?
1个回答

6
事实上,会话超时设置比其他设置更为关键。将认证超时设置为非常长的时间段不会影响服务器资源,但是如果将会话超时设置为较长的时间段,则可能在高压力下导致内存问题。
您对自己的陈述是正确的。作为开发者,我更喜欢第2种方式。然而,有一种简单的方法来处理会话过期。请查看此SO问题。其中一个答案提供了解决会话过期的好方法。
protected void Session_Start(Object sender, EventArgs e)
{
    if (User.Identity.IsAuthenticated)
    {
        FormsAuthentication.SignOut();                         
        Response.Redirect("~/SessionEnd.aspx");
    }
}

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


1
值得注意的是,在Web应用程序中,将所有的“Session”访问都放在一个类中,并始终检查“Session”是否为null并在必要时重新初始化它是个很好的主意。 - Jez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接