我希望我的用户在X分钟不活动后自动注销。我也想要破坏所有会话。
如何做到这一点?如何检查是否不活动然后执行一个函数来记录它们?
答案 0 :(得分:10)
我厌倦了Michiels的方法而且没有在哪里。 在调查中,我看到if语句只是将到期时间段添加到当前时间,因此该语句从未被解雇。
这是我的修改版本:
在登录用户或加载安全页面时设置此项:
$_SESSION['expire'] = time()+1*60;
并使用它来查看到期时间是否小于当前时间(即我们已超过到期限制):
if(time() > $_SESSION['expire']){
$user -> logout();
}
答案 1 :(得分:4)
答案 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();
?>