2013-02-28 82 views
0

我目前從PHP Web應用程序處理超時這樣:顯示超時警告中的jQuery

  • 每一頁目前在PHP超時檢查,由用戶檢查對最後頁面加載當前時間。如果兩者之間的差異超過15分鐘,則用戶的會話被銷燬,創建新的會話,當前頁面位置被放置到會話上,並且用戶被重定向到登錄頁面。
  • 每一頁頭有<meta>標籤其中15分5秒後刷新頁面(因此「呼叫」超時檢查)

我現在目前正在研究增加更多的控制的用戶,例如,如果他們碰巧在很長一段時間內在頁面上工作,並且正在考慮允許彈出窗口在超時前大約兩分鐘出現。然後彈出窗口可以選擇繼續會話(使AJAX調用刷新會話中的最後一個活動)或註銷。如果彈出窗口被忽略(例如,如果用戶位於不同的頁面上),用戶將被註銷。

根據Using Javascript to override or disable meta refresh tag,我將無法重置<meta>標記,這可能意味着我必須刪除標記。 PHP/Javascript Session Timeout with warning的唯一答案建議使用JavaScript調用重定向到登錄頁面,但是可以通過禁用JavaScript來繞過這一點。

我想要做的是圍繞<meta>重定向標記<noscript>(因爲我使用的是HTML5,因此可以使用),這樣即使用戶不使用JavaScript,它們仍然會超時。這也將刪除<meta>標記,以觸發用戶是否決定繼續他們的會話。

這種方法有意義嗎?我錯過了什麼嗎?還有另外一種更好的方法嗎?


我當前的代碼

<?php 
require_once("include/session.php"); 
require_once("include/sessioncheck.php"); 
?> 
<html> 
    <head> 
     <meta http-equiv="refresh" content="<?= TIMEOUT_MIN * 60 ?>" /> 
     <!-- additional tags --> 
    </head> 
    <body> 
     <!-- content --> 
    </body> 
</html> 
+0

會話超時配置已經存在於PHP配置中。 – MatRt 2013-02-28 23:22:18

+0

@ user1073122 - 雖然看起來我可以在.htaccess文件中對其進行修改,但它看起來像是全局應用的(當我將爲不同的用戶組添加不同的超時時)。在任何情況下,我都希望在沒有用戶活動的情況下刷新頁面(這意味着用戶不一定會在任何地方點擊,並且可能已經離開計算機) – 2013-02-28 23:57:29

+0

嘗試添加javascript befoer元標記以編輯元標記 – Vineet1982 2013-03-01 02:51:04

回答

2

我最終什麼事做離開我sessioncheck.php代碼和取出<meta>標籤。然後我添加了結束標記之前如下:

<div id="timeout-warning"></div> 
<div id="timeout-warning-text">Your session is set to expire in less than one minute 
    due to inactivity. Click <a href="javascript:void(0)" id="timeout-restart"> 
    here</a> to keep your session alive.</div> 

<script type="text/javascript"> 
    var timeoutWarning; 
    var timeout; 
    $(document).ready(function() { 
     $("#timeout-restart").click(function() { 
      clearTimeout(timeout); 
      timeout = setTimeout(function() { 
       document.location.reload(false); 
      }, 1801000); 
      timeoutWarning = setTimeout(function() { 
       $("#timeout-warning").fadeTo(2000, 0.5); 
       $("#timeout-warning-text").fadeIn(2000); 
      }, 1740000); 
      $("#timeout-warning").hide(); 
      $("#timeout-warning-text").hide(); 
      return false; 
     }); 

     timeoutWarning = setTimeout(function() { 
      $("#timeout-warning").fadeTo(2000, 0.5); 
      $("#timeout-warning-text").fadeIn(2000); 
      clearTimeout(softTimeout); 
     }, 1740000); 
     timeout = setTimeout(function() { 
      document.location.reload(false); 
     }, 1801000); 
    }); 
    </script> 

的1740000個1801000號從PHP常量,這恰好是基於一個半小時的超時爲主。