6

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

如何才能做到这一点?我如何检查不活动然后执行功能将它们注销???

4

10 回答 10

10

我厌倦了 Michiels 的接近,却无处可去。在调查中,我看到 if 语句只是将到期时间添加到当前时间,因此该语句从未触发。

这是我的修改版本:

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

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

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

if(time() > $_SESSION['expire']){
 $user -> logout();
}
于 2011-01-10T10:21:57.620 回答
4

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

ini_set('session.gc_maxlifetime',30);

这是您可能的解决方案。

于 2010-06-18T10:47:09.080 回答
3

你也可以这样做:

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

在每个页面上,当用户尝试导航并且他已经闲置了 20 分钟时,您可以像这样将他注销:

if($_SESSION['loginTime'] < time()+20*60){ logout(); }
于 2010-06-18T10:51:44.067 回答
2

根据您的服务器的速度和您拥有的用户数量,您可以让它在用户执行任何操作(导航、单击按钮等)时向您的服务器发送请求。从这个请求中,用他们的最后活动时间更新一个 SQL 表。

让一个 cron 作业定期在表中运行,并删除在您的阈值范围内处于非活动状态的用户的会话。

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

于 2010-06-18T10:46:22.040 回答
2

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

于 2010-06-18T10:52:00.240 回答
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
    }
}
}
于 2016-12-16T04:33:32.183 回答
0

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

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

我个人只是使​​用 cookie 并让它们在特定时间过期,但不管你的船是什么。

如果当前时间超过时间 X 30 秒(来自数据库)

于 2010-06-18T10:47:10.063 回答
0


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

});

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

于 2014-11-27T09:24:11.637 回答
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();  
?>
于 2017-09-12T17:39:12.367 回答
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['timeout'] 每次重新加载页面时都会重置,我在每个子页面的标题中都有一个包含文件,至少对我有用。

于 2017-01-18T08:40:33.587 回答