2010-06-18 74 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(); 
?>