2010-08-06 120 views
4

這是我除了EndSession.aspx檢查是否會話超時

override protected void OnInit(EventArgs e) { 
base.OnInit(e); 

if (Context.Session != null) 
    { 
     //check the IsNewSession value, this will tell us if the session has been reset. 
     //IsNewSession will also let us know if the users session has timed out 
     if (Session.IsNewSession) 
     { 
      //now we know it's a new session, so we check to see if a cookie is present 
      string cookie = Request.Headers["Cookie"]; 
      //now we determine if there is a cookie does it contains what we're looking for 
      if ((null != cookie) && (cookie.IndexOf("ASP.NET_SessionId") >= 0))//&& !Request.QueryString["timeout"].ToString().Equals("yes")) 
      { 
       //since it's a new session but a ASP.Net cookie exist we know 
       //the session has expired so we need to redirect them 

       Response.Redirect("EndSession.aspx?timeout=yes"); 
      } 
     } 
    } 
} 

但在EndSession所有網頁我嘗試導航回到基類,說的Default.aspx,然後這上面的代碼只是重定向回到EndSession.aspx。

因此,對於更好地澄清: 第1步:進入mypage.aspx 第2步:等待超時 第3步:嘗試導航離開 第4步:重定向到EndSession.aspx 步驟5:嘗試導航遠 第6步:設置轉到4

SETP 6應該是真正能夠瀏覽了......

(如果需要pelase要求進一步澄清)

任何想法?

謝謝!!!

+0

你實際上在努力達到什麼,你無法做到,讓我們說FormsAuthentication?我的意思是你將重定向到default.aspx的原因是什麼,應該發生什麼魔術? – Jeroen 2010-08-06 15:33:00

+0

我接受其他想法。雖然我應該提到我並不擔心對用戶進行身份驗證。還有其他事情存儲在會話狀態中,如果他們未被特意刪除可能會導致問題。我願意接受更好的替代品,但我仍然認爲我正在努力做的事情應該是可以實現的。不是嗎? – kralco626 2010-08-06 17:46:32

回答

4

我擺脫了我原來的基礎頁面。

把這個Global.asax中

void Session_Start(object sender, EventArgs e) 
{ 
    string cookie = Request.Headers["Cookie"]; 
    // Code that runs when a new session is started 
    if ((null != cookie) && (cookie.IndexOf("ASP.NET_SessionId") >= 0))//&& !Request.QueryString["timeout"].ToString().Equals("yes")) 
    { 
     if(Request.QueryString["timeout"] == null || !Request.QueryString["timeout"].ToString().Equals("yes")) 
      Response.Redirect("Default.aspx?timeout=yes"); 
    } 
} 

的在session_start把這個Defualt.aspx頁:

if (!IsPostBack) 
    { 
     if (Request.QueryString["timeout"] != null && Request.QueryString["timeout"].ToString().Equals("yes")) 
     { 
      Response.Write("<script>" + 
       "alert('Your Session has Timedout due to Inactivity');" + 
       "location.href='Default.aspx';" + 
       "</script>"); 
     } 
    } 

即使超時Default.aspx頁面上會出現此解決方案

我使用的解決方案的缺陷發佈在這裏:How to stop basepage from recursivly detecting session timeout