用户不活动注销 PHP
Posted
技术标签:
【中文标题】用户不活动注销 PHP【英文标题】:User Inactivity Logout PHP 【发布时间】:2011-03-05 09:04:24 【问题描述】:我希望我的用户在 X 分钟不活动后自动注销。我也想销毁所有会话。
如何做到这一点?如何检查不活动状态然后执行功能将它们注销???
【问题讨论】:
【参考方案1】:最简单的方法是这样。如果用户没有激活您网站上的某些元素,则将用户发送到注销页面
$secondsWait = 300; // these are seconds so it is 300s=5minutes
header("refresh:$secondsWait; logout.php");
重定向的内容... logout.php,销毁所有会话,还可能发送一条消息提醒用户他们退出的原因
<?php
session_start();
session_unset();
session_destroy();
?>
【讨论】:
【参考方案2】:这就是我的做法:
//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'] 每次重新加载页面时都会重置,我在每个子页面标题的包含文件中都有这个,至少对我有用。
【讨论】:
【参考方案3】:您可以通过 $_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
【讨论】:
【参考方案4】:$(文档).ready(函数() setTimeout(function() CALL LOGOUT.PHP VIA AJAX , 720000);
);720000 表示 12 分钟(用于说明目的) 将此脚本放在您的标题中并设置您自己的不活动时间 你可以设置你想要的时间,它会像 如果您设置 5 分钟,那么当您登录系统时,它会开始计数 5 分钟。但是如果你点击任何模块,这个脚本将被重新加载,因为当页面翻页时,标题也会在脚本重新加载时重新加载,然后它从 0(初始)开始计数,但如果你无法在 5 分钟内访问系统。然后它将加载logout.php,系统将注销
【讨论】:
【参考方案5】:使用unset($_SESSION['NAME']);
或session_destroy();
。您还可以更改会话的值。
要在某个时间执行此操作,您需要在数据库中设置一个时间戳,然后调用它来检查它是否超过 X 分钟。查看底部的链接。
我个人只是使用 cookie 并让它们在某个时间过期,但不管你的船是什么。
If current time is more than 30 seconds past time X (from the database)
【讨论】:
【参考方案6】:我厌倦了 Michiels 的接近,却无处可去。 在调查中,我看到 if 语句只是将过期时间添加到当前时间,因此该语句从未触发。
这是我修改后的版本:
在登录用户或加载安全页面时设置:
$_SESSION['expire'] = time()+1*60;
并使用它来查看到期时间是否小于当前时间(即我们超过了到期限制):
if(time() > $_SESSION['expire'])
$user -> logout();
【讨论】:
【参考方案7】:PHP 的会话机制已经有一个基于不活动超时的垃圾收集器。你不用担心。
【讨论】:
有点误导 - 垃圾收集与会话何时被禁用无关 - 只有时间(稍后)数据被清除。答案是会话生命周期(令人困惑的是,它以 gc_ 为前缀)【参考方案8】:你也可以这样做:
$_SESSION['loginTime'] = time();
在每个页面上,当用户尝试导航并且他已经闲置了 20 分钟时,您可以像这样将他注销:
if($_SESSION['loginTime'] < time()+20*60) logout();
【讨论】:
【参考方案9】:您可以设置会话超时限制,例如:
ini_set('session.gc_maxlifetime',30);
Here is the possible solution for you.
【讨论】:
【参考方案10】:根据您的服务器的速度和您拥有的用户数量,您可以让它在用户执行任何操作(导航、单击按钮等)时向您的服务器发送请求。根据这个请求,用他们的最后活动时间更新一个 SQL 表。
让一个 cron 作业定期在表中运行,并删除在阈值范围内处于非活动状态的用户的会话。
如果您的服务器很慢或者您有很多用户,您可以不经常运行此脚本。
【讨论】:
这根本不是一个有效的解决方案。以上是关于用户不活动注销 PHP的主要内容,如果未能解决你的问题,请参考以下文章
如果不活动10分钟,我如何使用php上的会话注销用户[重复]
当用户在页面 javascript 或 php 中不活动 3 分钟时自动注销