簡體   English   中英

用戶不活動注銷PHP

[英]User Inactivity Logout PHP

我希望我的用戶在X分鍾不活動后自動注銷。 我也想要破壞所有會話。

如何才能做到這一點? 如何檢查不活動然后執行一個函數來記錄它們?

我厭倦了Michiels的方法並且沒有在哪里。 在調查中,我看到if語句只是將到期時間段添加到當前時間,因此該語句從未觸發。

這是我的修改版本:

登錄用戶或加載安全頁面時設置此項:

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

並使用它來查看到期時間是否小於當前時間(即我們已超過到期限制):

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

您可以設置會話超時限制,如:

ini_set('session.gc_maxlifetime',30);

以下是適合您的解決方案。

你也可以這樣做:

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

在每個頁面上,當用戶嘗試導航並且他已經處於非活動狀態20分鍾時,您可以將其記錄下來,如下所示:

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

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

讓cron作業以一定的時間間隔在表中運行,並刪除對於您的閾值將處於非活動狀態的用戶的會話。

如果您的服務器速度很慢或者您擁有大量用戶,則可以不經常運行此腳本。

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

您可以通過$ _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
    }
}
}


$(document).ready(function()
{
setTimeout(function(){ CALL LOGOUT.PHP VIA AJAX },720000);

});

720000表示12分鍾 (僅供參考)
將此腳本放在標題中,並設置自己的不活動時間
你可以設置你想要的時間,就像你設置5分鍾然后當你登錄系統然后它開始計數5分鍾一樣。 但如果你點擊任何模塊,這個腳本將被重新加載,因為當頁面轉動時,當重新加載腳本時頭文件也會重新加載,然后它從0開始計數(初始),但如果你不能在5分鍾內訪問系統。 然后它將加載logout.php並且系統將注銷

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

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

我個人只是使​​用cookies並讓它們在某個時間到期,但無論你的船是什么漂浮。

如果當前時間超過30秒(從數據庫)

我就是這樣做的:

//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 ['timeout'],我在每個子頁面的標題中都有一個包含文件,至少對我有效。

最簡單的方法就是這樣。 如果用戶未激活您網站上的某些元素,請將用戶發送到注銷頁面

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

redirect ... logout.php的內容,銷毀任何會話,也可能發送一條消息,提醒用戶注銷的原因

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM