1. 程式人生 > >session超時跳出iframe並跳到登陸頁面

session超時跳出iframe並跳到登陸頁面

  在網頁程式設計時,我們經常需要處理,當session過期時,我們要跳到登陸頁面讓使用者登陸,由於我們可能用到IFrame框架,所以我們我登陸頁面需要顯示在整個頁面,而不是一個IFrame中,大部分的網友是用下面的程式碼進行實現的。

       在過濾器中寫如下程式碼:

[java] view plain copy print?
  1. printWriter out = response.getWriter();    
  2. out.write("<script>window.parent.location.href='login.jsp'</script>");  

      我的實現方式是:跟普通過濾器的寫法一樣,跳到某個action,讓action決定要跳到的頁面,然後在登入頁面寫上這麼一段程式碼 
[html] view plain copy print?
  1. <scriptlanguage="JavaScript">
  2. //判斷當前視窗是否有頂級視窗,如果有就讓當前的視窗的位址列發生變化,    
  3. //這樣就可以讓登陸視窗顯示在整個視窗了    
  4. function loadTopWindow(){    
  5.     if (window.top!=null && window.top.document.URL!=document.URL){    
  6.         window.top.locationdocument.URL;     
  7.     }    
  8. }    
  9. </script>
  10. </head>
  11. <!--在body的寫上onload事件要呼叫的方法-->
  12. <bodyonload="loadTopWindow()">

兩種方式都是用js進行實現,各有優缺點

第一種方式的缺點是要Java中寫了JavaScript程式碼,這樣的程式碼風格不是很好,優點是編寫簡單;

第二種方式的缺點是要傳送兩次請求,在登陸頁面比較大的情況下,這個方式確實不太好,好在一般的登入頁面都比較簡單,優點是易於維護,在寫是時候,只要把這麼一段程式碼複製進去就可以了,所以我個人推薦使用第二種方式。

在web.xml中定義session過期時間:

  1. <!-- session超時定義,單位為分鐘 -->
  2.     <session-config>
  3.         <session-timeout>2</session-timeout>
  4.     </session-config>


JavaScript解決session過期,跳轉到首頁並跳出iframe

可以在登入頁面login.jsp中<head> </head>中新增如下程式碼

  1. <scripttype="text/javascript">
  2.     if (window != top)   
  3.     top.location.href = location.href;   
  4. </script>