我想在我的asp.net应用程序中检测会话状态超时,但无法这样做。我有一个基类从System.Web.UI.Page派生如下: -ASP.NET会话状态超时问题
public class BasePageSessionExpire : Page
{
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
if (Context.Session != null)
{
if (Session.IsNewSession)
{
string szCookieHeader = Request.Headers["Cookie"];
if ((null != szCookieHeader) && (szCookieHeader.IndexOf("ASP.NET_SessionId") > 0))
{
Session.Abandon();
Response.Redirect("~/SessionExpired.aspx",true);
}
}
}
}
}
所有的页面,我需要的会话状态,从这个基类派生上检查“System.Web.UI.Page而不是”。而且,所有这些页面都有EnableSessionState =“True”。如果这是相关的,我在我的global.asax文件中有一个空白的Session_Start()方法。
由于第一次请求后的某些原因,“Session.IsNewSession”属性始终为false。只有第一次请求才是真的,然后总是假的。我的超时时间设置为1分钟。会议似乎从未超时。我在这里错过了什么?
另外我在SQL Server 2008中实现了一个状态服务器。这不是一个进程内会话状态实现。
在此先感谢。
所以你说在第一次请求之后IsNewSession会一直是假的?所以,即使会话超时,上面的代码也不会工作,因为IsNewSession将始终是false,并且代码永远不会有机会进入并执行“Session.Abandon”,而实际上会话超时? – user314827 2010-04-13 22:56:19
IsNewSession只对导致创建新会话对象的HttpRequest成立。在超时后第一次请求服务器应该这样做,我相信。 – womp 2010-04-13 23:48:30
另外我在SQL Server 2008中实现了一个状态服务器。这不是一个进程内会话状态实现。 – user314827 2010-04-14 00:24:30