2015-05-04 140 views
0

我是網頁開發人員的初學者。我花了一些時間認識到用PHP限制會話時間的方法。我已經閱讀了Stackoverflow的建議,但是他們中的任何一個似乎都不適合我(cookie - 可能由用戶編輯,AJAX通信 - 服務器和靜態PHP的額外負載 - 瀏覽器中的被動選項卡?使用會話變量進行驗證)。會話的控制持續時間PHP

我想到這一點:

<script type="text/javascript"> 
    $(document).ready(function() { 
     setTimeout(function() { 
      window.location.href = 'logout.php'; 
     }, 10000); 
    }); 
</script> 

...來限制用戶會話時間。該系統將用於管理Web應用程序。任何人都可以指出我的方法可能存在的缺點,因爲它似乎太簡單而不好?每一個PHP頁面上

+0

禁用JavaScript很容易做到,並會阻止它運行。 –

+0

這個腳本的問題是,每次加載這個腳本時,瀏覽器都會在10秒內轉到「logout.php」。當刷新此頁面時,10秒倒計時將重新開始。 – Aviz

+0

謝謝,到目前爲止我的目的似乎很好。由於與用戶和數據庫的動態交互,我的系統將強制用戶啓用JavaScript。當用戶停用10秒(會增加)時,它會將他註銷。 – Roman

回答

0
<?php 
function check_user_is_valid() { 
    //Start our session. 
    session_start(); 

    //Expire the session if user is inactive for 30 
    //minutes or more. 
    $expireAfter = 30; 

    //Check to see if our "last action" session 
    //variable has been set. 
    if(isset($_SESSION['last_action'])){ 

     //Figure out how many seconds have passed 
     //since the user was last active. 
     $secondsInactive = time()-$_SESSION['last_action']; 

     //Convert our minutes into seconds. 
     $expireAfterSeconds = $expireAfter * 60; 

     //Check to see if they have been inactive for too long. 
     if($secondsInactive >= $expireAfterSeconds){ 
      //User has been inactive for too long. 
      //Kill their session. 
      session_unset(); 
      session_destroy(); 
     } 
    } 
} 

//Assign the current timestamp as the user's 
//latest activity 
$_SESSION['last_action'] = time(); 

呼叫check_user_is_valid()函數來檢查用戶是否具有有效的session.It如果頁面仍然是30分鐘會自動銷燬會話。

使用每個頁面上的新時間更新$ _SESSION ['last_login']變量的值,以便用戶爲每個頁面獲得30分鐘會話。

+0

感謝您的回答,但我認爲您的方法不適用於瀏覽器中的被動選項卡。某些操作應該觸發此腳本。 – Roman

+0

你爲什麼不嘗試使用ajax方法。您可以將此腳本放在ajax調用中,並可以在每個被動選項卡單擊時檢查會話值 –