我想在我的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