2013-05-30 114 views
0

我有使用AJAX和執行每10秒更新一些數據的Web應用程序。 我設置PHP會話閒置60分鐘後PHP會話死了,踢用戶離開頁面,但該頁面中的會話永遠不會過期,我想這是因爲Ajax調用執行每10秒和服務器刷新「超時」,我的會話在其他頁面中正常工作,我不執行ajax。你們認爲我在這個網頁中的問題是因爲ajax每10秒鐘撥打一次電話?PHP會話永遠不會結束,因爲AJAX調用

我的jQuery代碼:

delay(function(){ 
     check(); 
    }, 10000); 

    function check() 
    { 
     $.ajax({ 
     dataType: "json", 
     url: "lead.php", 
     cache: false, 
     success: function(msg){ 
      //Do something 
     } 
     }); 
    } 
+4

當然,你已經回答了你自己的問題。如果問題只出現在帶有Ajax的頁面上,並且每10秒發送一次請求,那麼它確實會重置超時。您可以通過手動跟蹤會話超時來解決此問題。 – Aneri

+1

根據您對情況的描述,您對問題的評估看起來很準確。你有問題可以幫助你解決嗎? –

+0

感謝您的幫助。我怎樣才能跟蹤會話,或者如何在閒置30分鐘後終止會話? –

回答

1

如果你想要X時間後關閉會話,無論正在做Ajax請求,但前提是用戶在網頁上沒有任何活動,你可以使用此代碼,我使用的是:

(function() { 
    // After 30 minutes without moving the mouse, the user will be redirect to logout page 
    var time2refresh = 30; 
    // This is how many time the user has to be inactive to trigger the countdown of 30 minutes 
    var timeInactive = .5; 
    // This will store the timer in order to reset if the user starts to have activity in the page 
    var timer = null; 
    // This will store the timer to count the time the user has been inactive before trigger the other timer 
    var timerInactive = null; 
    // We start the first timer. 
    setTimer(); 
    // Using jQuery mousemove method 
    $(document).mousemove(function() { 
      // When the user moves his mouse, then we stop both timers 
     clearTimeout(timer); 
     clearTimeout(timerInactive); 
      // And start again the timer that will trigger later the redirect to logout 
     timerInactive = setTimeout(function() { 
      setTimer(); 
     }, timeInactive * 60 * 1000); 
    }); 
    // This is the second timer, the one that will redirect the user if it has been inactive for 30 minutes 
    function setTimer() { 
     timer = setTimeout(function() { 
      window.location = "/url/to/logout.php"; 
     }, time2refresh * 60 * 1000); 
    } 
})(); 

所以這個功能的邏輯是這樣的:

1)用戶登錄到您的網站 2)。5分鐘(30秒後)O如果用戶移動鼠標,兩個定時器都將被重置,而第一個定時器將重新開始。 4)如果在30分鐘後用戶不移動他的鼠標,那麼它將被重定向到註銷頁面,關閉他的會話。

+1

大碼,以爲我會用你的代碼,但不是鼠標懸停我會。點擊事件。 –

+0

@HelderAlvarez不要忘記標記爲解決方案;) – Cito

0

我猜lead.php使用session_start()。您只能在該文件中刪除它。

或者,在第一次初始化,當前時間保存到會話變種,然後爲每個呼叫,檢查了一個多小時已經過去了。如果爲真,session_destroy()