由于不活动而导致会话超时[重复]

Posted

技术标签:

【中文标题】由于不活动而导致会话超时[重复]【英文标题】:session timeout due to inactivity [duplicate] 【发布时间】:2013-03-13 19:39:24 【问题描述】:

我创建了一个脚本login.php,并在那里创建了一个名为logged_in的会话变量

$_SESSION['logged_in'] = true;

在会话由于不活动而到期后,我无法找到一种方法来重定向以重定向到我的 logout.php。我还应该放置使该会话变量过期的代码。我已经用谷歌搜索了这个错误,它建议在大多数文章中调整php.ini 文件。但是我看到一篇文章说这不是最佳实践。 我在 *** 上找到了以下代码,但我不知道放在哪里:-

<?php
  if ($_SESSION['timeout'] + 10 * 60 < time()) 
     // session timed out
   else 
     // session ok
  
?>

我想知道在会话过期后重定向的最佳方式以及代码放置位置的建议。 编辑:我忘了提到我想知道如何手动设置会话到期的时间。 提前谢谢你

【问题讨论】:

【参考方案1】:

实现这个想法:

$expire_time = 3*60*60; //expire time
if( $_SESSION['last_activity'] < time()-$expire_time ) 
    echo 'session expired';
    die();

else 
    $_SESSION['last_activity'] = time(); // you have to add this line when logged in also;
    echo 'you are uptodate';

【讨论】:

【参考方案2】:

如果您想在用户长时间不活动时尝试加载页面时注销用户,您应该将此代码放在每个 php 文件的顶部(在任何其他 html 标记之前):

if( $_SESSION['last_activity'] < time()-$_SESSION['expire_time'] )  //have we expired?
    //redirect to logout.php
    header('Location: http://yoursite.com/logout.php'); //change yoursite.com to the name of you site!!
 else //if we haven't expired:
    $_SESSION['last_activity'] = time(); //this was the moment of last activity.

另外,在您成功登录后,将此代码放在您登陆的页面顶部:

$_SESSION['logged_in'] = true; //set you've logged in
$_SESSION['last_activity'] = time(); //your last activity was now, having logged in.
$_SESSION['expire_time'] = 3*60*60; //expire time in seconds: three hours (you must change this)

在该页面上,您不必包含我首先给您的检查代码。

对了,别忘了正确添加&lt;?php标签!

【讨论】:

所有页面都应该包含session_start吗? @surfine session_start 到底是什么意思?代码$_SESSION['logged_in'] = true;?您应该将其放在登录登录页面上。我已经编辑了我的答案。 这对我有用,但是我登录后转到的页面是我的应用程序主页,如果您在不是主页的页面上等待计时器/会话到期,然后单击指向主页的链接,会话将继续。当会话过期时,如何让链接返回主页?同时注销用户? 忽略上述评论。我想到了。我需要做的就是让我的登录页面链接到一个重定向页面,该页面有你的第二个代码块并重定向到主页。然后我只需要在主页上实现你的第一个代码块。谢谢 @AlMar89 太好了,你解决了!

以上是关于由于不活动而导致会话超时[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP会话默认超时[重复]

PHP会话默认超时[重复]

通过浏览器检测用户不活动 - 纯粹通过 javascript [重复]

通过 .htaccess 在 PHP 中延长会话超时

通过 .htaccess 在 PHP 中延长会话超时

增加PHP中的会话超时[重复]