繁体   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