【发布时间】:2011-09-23 20:28:46
【问题描述】:
我正在开发一个 ASP.NET 3.5 WebForms 应用程序,我希望会话在一段时间后超时。之后,如果用户尝试做任何事情,应用程序应该将他们重定向到一个页面,说明会话已超时并且他们需要重新开始。据我所知,相当标准的东西。
但是,我似乎无法让会话超时来测试此功能,无论是从 Visual Studio 还是从 IIS 运行。这是我在 web.config 中的会话状态设置:
<sessionState mode="SQLServer"
allowCustomSqlDatabase="true"
sqlConnectionString="<ConnectionString>"
cookieless="false"
timeout="1" />
这是我测试会话超时的方法:
public bool IsSessionTimeout
{
get
{
// If the session says its a new session, but a cookie exists, then the session has timed out.
if (Context.Session != null && Session.IsNewSession)
{
string cookie = Request.Headers["Cookie"];
return !string.IsNullOrEmpty(cookie) && cookie.IndexOf("ASP.NET_SessionId") >= 0;
}
else
{
return false;
}
}
}
似乎Session.IsNewSession 总是返回false,这是有道理的,因为在我的 Global.asax.cs 中永远不会调用 Session_End 方法。我错过了什么?
【问题讨论】:
-
我相信 Session_End 只在进程会话中被调用。检查会话 ID 以查看是否在时间到期后生成了新 ID。
标签: c# asp.net iis session-timeout