2010-06-18 84 views
4

我希望我的用戶在X分鐘不活動後自動註銷。我也想讓所有會話都被銷燬。用戶不活動註銷PHP

如何才能做到這一點?我如何檢查不活動,然後執行一項功能將其註銷?

回答

2

你也可以這樣做:

$_SESSION['loginTime'] = time(); 

在每一個頁面,當用戶試圖瀏覽和他一直處於非活動狀態20分鐘您可以登錄他出來是這樣的:

if($_SESSION['loginTime'] < time()+20*60){ logout(); } 
2

根據您的服務器的速度和您擁有的用戶數量,您可以在用戶執行任何操作(導航,單擊按鈕等等)時向您的服務器發送請求。根據此請求,使用上次活動時間更新SQL表。

讓cron作業在某個固定的時間間隔運行,並刪除那些無論您的閾值是否處於非活動狀態的用戶的會話。

如果你的服務器速度很慢或者你有很多用戶,你可以讓這個腳本很少運行。

+0

這根本不是一個有效的解決方案。 – DannyG 2014-05-21 13:57:13

0

使用unset($_SESSION['NAME']);session_destroy();。您也可以更改會話的值。

要在特定時間執行此操作,您需要在數據庫中設置時間戳,然後調用它來檢查它是否超出X分鐘。看看底部的鏈接。

我個人只是使​​用cookie,並使它們在某個特定時間到期,但無論漂浮在您的船上。

If current time is more than 30 seconds past time X (from the database)

2

根據不活動超時,PHP的會話機制已經有一個垃圾收集器。你不用擔心。

+1

有點誤導 - 垃圾收集與會話被禁用時無關 - 只有數據被清除的時間(以後)。答案是會話的生命週期(令人困惑的是前綴爲gc_) – symcbean 2010-06-18 11:57:01

10

我累Michiels的方法,並沒有得到的地方。 在調查中,我看到if語句簡單地將到期時間添加到當前時間,所以從未聲明該語句。

這是我修改過的版本:

集這在用戶登錄或加載安全頁面時:

$_SESSION['expire'] = time()+1*60; 

,並以此來查看是否過期時間小於當前時間(即我們「再過去的有效期限):

if(time() > $_SESSION['expire']){ 
$user -> logout(); 
} 
0


$(文件)。就緒(函數()
{
setTimeout(function(){CALL LOGOUT。PHP VIA AJAX},720000);

});

720000意味着12分鐘(用於說明目的)
把這個腳本在你的頭,並設置UR自己的閒置
可以設置時間ü想,它會像 工作,如果你設置5什麼時候分鐘然後當你登錄系統,然後開始計數5分鐘。但是如果你點擊任何模塊,這個腳本將被重新加載,因爲當頁面轉動的時候,當腳本被重新加載時,頭也被重新加載,然後它從0開始計數(初始),但是如果你不能在5分鐘內訪問系統。那麼它將加載logout.php並且系統將註銷

0

您可以通過$ _SESSION ['lastactive'] = time()設置上次活動時間,並在用戶每次導航到新頁面時更新它。然後你可以在每個頁面上都有一個函數timeout()。

function timeout()  
{ 
    $maxtime = 60*2; // Here , maxtime has been set to 2 minutes 

if(isset($_SESSION['lastactive']) and (time() - $_SESSION['lastactive'] > $maxtime)) // subtracting current time from lastactive time and seeing if it exceeded timeout limit. 
{ 
    signout(); //logging out   
} 

if(isset($_SESSION['lastactive']) and (time() - $_SESSION['lastactive'] < $maxtime)) // subtracting current time from lastactive time and seeing if it exceeded timeout limit. 
{ 
    return 1; // timeout limit not exceeded  
} 
else 
{ 
    if(!isset($_SESSION['lastactive'])) 
    { 

     $_SESSION['lastactive'] = time(); //if lastactive is not set 
    } 
} 
} 
0

這是我要做的事:

//set timeout period in seconds 
$idleTime= 60*2; 
//check to see if $_SESSION['timeout'] is set 
if(isset($_SESSION['timeout'])){ 
$session_life = time() - $_SESSION['timeout']; 
if($session_life > $idleTime){ 
// your logout code here* 
    } 
} 
$_SESSION['timeout'] = time(); 

這使得$ _SESSION [「超時」]重置每一個頁面重新加載的時候,我在每頭有這個包含文件子頁面,爲我工作至少。

0

最簡單的方法是這樣的。發送用戶在註銷頁面,如果他們不能在你的網站激活某些元素重定向

$secondsWait = 300; // these are seconds so it is 300s=5minutes 
header("refresh:$secondsWait; logout.php"); 

內容... logout.php,摧毀任何會議,也許還發送一條消息,提醒用戶他們爲什麼已註銷

<?php 
session_start(); 
session_unset(); 
session_destroy(); 
?>