【发布时间】:2011-05-23 01:23:53
【问题描述】:
我正在努力设置/更正我的会话超时代码,并查阅了许多文章,例如 this one 和 this SO post,以了解如何最好地执行此操作。我一遍又一遍地检测会话超时的解决方案是首先检查 Session.IsNewSession 属性是否为真,如果是,则检查会话 cookie 是否已存在。我猜这里的逻辑是用户已经结束了他们最后一个超时的会话,开始了一个新的会话,但是旧的 cookie 还没有被删除。这些检查的代码如下所示:
if (Context.Session != null)
{
if (Session.IsNewSession)
{
string szCookieHeader = Request.Headers["Cookie"];
if ((null != szCookieHeader) && (szCookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
{
Response.Redirect("sessionTimeout.htm"); // or whatever code to handle timeout
}
}
}
现在我正在使用 120 分钟的会话超时值和 60 分钟的表单超时值。我的 web.config 文件中的这两行分别在这里:
<sessionState mode="InProc" cookieless="UseDeviceProfile" timeout="120" />
<authentication mode="Forms">
<forms loginUrl="~/Home/Customer" timeout="60" name=".ASPXAUTH" requireSSL="false" slidingExpiration="true" defaultUrl="~/Home/Index" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/>
</authentication>
因此,在 60 分钟后(我将其设置为 1 进行测试),我向服务器发出请求,并自动重定向到 /Home/Customer,我假设是由于我的 web.xml 中的“loginURL”值。配置行。
问题是会话没有结束,我所有的会话超时检查都在 Home/Customer 操作中(我使用 MVC)。所以我被重定向到 Home/Customer,我通过了上面的检查,但是当我到达 Session.IsNewSession 时,这是错误的,因为会话仍然存在(我假设因为我还在 120 分钟内)设置)。
所以,最后,我的问题。整个会话超时检查方案是否仅在实际 Session 超时时起作用?或者我可以让它也适用于 Forms 超时吗?也许解决方案是将我的会话超时值设置为与表单超时值相同?
【问题讨论】: