用户不活动注销 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 分钟时自动注销

如何在 CMS PHP 中自动注销非活动用户

如何在php中检测用户是不是已注销?

如果用户在特定时间内不活动,如何使用 codeigniter 自动注销

如果他进入后台或在不活动几分钟后如何从 android 应用程序中注销用户