檢查頁面Session是否過期,過期執行相應操作 解決方法

weixin_33816946發表於2011-06-24
how to check session is expired or not if expired then redirect to login page

 

在專案中,如果客戶開啟頁面時間過久容易導致頁面Session過期,再進行任何操作時都會提示“Asp.Net session has expired”,這樣畢竟都使用者不太友好,所以需要解決一下,判斷Session是否過期,如果過期進行一下提示或者重新整理一下頁面。

protected void Page_Load()
{
   if (Context.Session != null)
   {
      if (Session.IsNewSession)
      {
         string cookieHeader = Request.Headers["Cookie"];
         if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
         {
            Response.Redirect("sessionTimeout.htm");
         }  
      } 
   }
}

如果想在重新整理當前頁面的話可以用

Response.Write("<script>alert('您好,頁面已經超時,將重新重新整理頁面。');document.location.replace(location.href);</script>");

來解決。這裡不用 document.location.reload();也是有原因的。如果是用reload則頁面會多出來一個彈出框,好像也不是太好。

Snap1

而使用 replace則不用出現這問題。該方法通過指定URL替換當前快取在歷史裡(客戶端)的專案

附上Replace和reload的區別:

reload 方法,該方法強迫瀏覽器重新整理當前頁面。
語法: location.reload([bForceGet]) 引數: bForceGet, 可選引數, 預設為 false,從客戶端快取裡取當前頁。true, 則以 GET 方式,從服務端取最新的頁面, 相當於客戶端點選 F5("重新整理")
 
replace 方法,該方法通過指定URL替換當前快取在歷史裡(客戶端)的專案,因此當使用replace方法之後,你不能通過“前進”和“後退”來訪問已經被替換的URL。
語法: location.replace(URL)    
 
在實際應用的時候,重新重新整理頁面的時候,我們通常使用: location.reload() 或者是 history.go(0) 來做。因為這種做法就像是客戶端點F5重新整理頁面,所以頁面的method="post"的時候,會出現“網頁過期”的提示。那是因為Session的安全保護機制。可以想到: 當呼叫 location.reload() 方法的時候, aspx頁面此時在服務端記憶體裡已經存在, 因此必定是 IsPostback 的。如果有這種應用: 我們需要重新載入該頁面,也就是說我們期望頁面能夠在服務端重新被建立, 我們期望是 Not IsPostback 的。這裡,location.replace() 就可以完成此任務。被replace的頁面每次都在服務端重新生成。你可以這麼寫: location.replace(location.href)

相關文章