【问题标题】:Automatically log out the user if he is not active for a certain period of time如果用户在一段时间内不活动,则自动注销用户
【发布时间】:2017-01-06 06:08:00
【问题描述】:

如果用户未处于活动状态,我希望用户在 30 分钟后自动注销。

我尝试了以下代码:
索引.php:

<?  
if ((time() - $_SESSION['last_activity']) > 1800) // 30* 60 = 1800
{  
   header("Location: logout.php");  
}  
?>

登录.php:

<?  
        $_SESSION['unm'] = $row['u_unm'];
        $_SESSION['uid'] = $row['u_pwd'];
        $_SESSION['status'] = true;
        $_SESSION['last_activity'] = time();  
?>  

我的问题是我不明白这段代码是如何跟踪用户活动的?

我面临的问题是确定用户是否处于活动状态。但我希望用户只在他不做任何事情时被注销。

谁能告诉我如何跟踪它?谢谢。

【问题讨论】:

  • 对于一个 &gt;? 应该会给你一些错误
  • 奥普斯。打字错误..修复了。
  • 请注意 - 默认情况下,会话持续 1440 秒(24 分钟)。 :) 只是想我会把它放进去。(在配置中可编辑)-也有可能在每次加载时在标题中运行 $_SESSION['last_activity'] = time() 以提供该数据。
  • 希望link 能帮到你谢谢....

标签: php session


【解决方案1】:

看起来你只有 index.php。尝试像这样修改您的代码:

<?  
if ((time() - $_SESSION['last_activity']) > 1800) // 30* 60 = 1800
{  
   header("Location: logout.php");  
} else {
   $_SESSION['last_activity'] = time();
}
?>

这只会更新你的会话,如果用户在你的 30 分钟内做了某事。

似乎您不使用库,因此您可能需要在您拥有的每个站点上实现此功能。


编辑

创建一个新文件,可以命名为lifesaver.php 或类似的名称。在此文件中,您粘贴上面的代码。

现在您将它包含在您拥有的每个页面上,如下所示:require('lifesaver.php');

这将包括您的文件,并且您的网站中包含上述代码。

解释上面的代码是如何工作的:

编辑:基本上在 30 分钟或更长时间内重新加载页面,您将自动转到logout.php。如果您在 30 分钟内重新加载页面,您的时间将被更新(意味着再过 30 分钟,直到自动注销)。每次用户使用此脚本重新加载或进入页面时,都会执行该代码。 – Antono

【讨论】:

  • 那么你必须在你拥有的每个站点上实施这个。您可以使用此代码创建一个新文件并将其包含到您拥有的每个站点中。
  • 假设我有 3 个页面:index.php、Contact.php 和 About.php。我不需要在每个页面中包含此代码吗?否则我在联系页面时如何设置计时器?
  • @OptimizedFaisal 你可以将它移动到一个文件中,并在每个页面上都需要它。或者你可以把它放在一个类中并为此做spl_autoload_register()
  • 您能否向我解释一下这段代码是如何持续跟踪活动的?我的意思是它不只是将会话保持 30 分钟,然后无论用户是否做了某事都将其销毁?当用户成功登录时,我基本上已经创建了这个会话($_SESSION['last_activity'])。这是否意味着用户将始终在 30 分钟后注销?
  • 编辑: 基本上在 30 分钟或更长时间内重新加载页面,您将自动转到logout.php。如果您在 30 分钟内重新加载页面,您的时间将被更新(意味着再过 30 分钟,直到自动注销)。每次用户使用此脚本重新加载或进入页面时,都会执行该代码。
猜你喜欢
  • 2010-10-09
  • 2013-09-23
  • 2018-12-19
  • 2013-04-15
  • 2017-08-17
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多