用户不活动注销PHP

时间:2010-06-18 10:42:39

标签: php session timeout logout user-inactivity

我希望我的用户在X分钟不活动后自动注销。我也想要破坏所有会话。

如何做到这一点?如何检查是否不活动然后执行一个函数来记录它们?

10 个答案:

答案 0 :(得分:10)

我厌倦了Michiels的方法而且没有在哪里。 在调查中,我看到if语句只是将到期时间段添加到当前时间,因此该语句从未被解雇。

这是我的修改版本:

在登录用户或加载安全页面时设置此项:

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

并使用它来查看到期时间是否小于当前时间(即我们已超过到期限制):

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

答案 1 :(得分:4)

您可以设置会话超时限制,如:

ini_set('session.gc_maxlifetime',30);

<强> Here is the possible solution for you.

答案 2 :(得分:3)

你也可以这样做:

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

在每个页面上,当用户尝试导航并且他已经处于非活动状态20分钟时,您可以将其记录下来:

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

答案 3 :(得分:2)

根据服务器的速度和用户的数量,您可以在用户执行任何操作时向服务器发送请求(导航,单击按钮等)。从此请求中,使用上一个活动时间更新SQL表。

让cron作业以一定的时间间隔在表中运行,并删除那些因阈值不同而处于非活动状态的用户的会话。

如果您的服务器很慢或者您拥有大量用户,则可以不经常运行此脚本。

答案 4 :(得分:2)

PHP的会话机制已经有一个基于不活动超时的垃圾收集器。你不用担心。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

使用unset($_SESSION['NAME']);session_destroy();。您还可以更改会话的值。

要在特定时间执行此操作,您需要在数据库中设置时间戳,然后调用它以检查它是否超过X分钟。看看底部的链接。

我个人只是使​​用cookies并让它们在某个时间到期,但无论你的船是什么漂浮。

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

答案 7 :(得分:0)


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

});

720000表示12分钟(用于说明目的)
将此脚本放在标题中,并设置自己的不活动时间  你可以设定你想要的时间,它会像你一样工作 如果您设置5分钟,那么当您登录系统时,它将开始计数5分钟。但是,如果你点击任何模块,这个脚本将被重新加载,因为当页面转动时,当重新加载脚本时头部也会重新加载,然后它从0开始计数(初始),但是如果你不能在5分钟内访问系统。然后它将加载logout.php并且系统将注销

答案 8 :(得分: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 [&#39; timeout&#39;],我在每个子页面的标题中都有一个包含文件,至少适用于我。

答案 9 :(得分:0)

最简单的方法就是这样。如果用户未激活您网站上的某些元素,请将用户发送到注销页面

$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();  
?>
相关问题