由于不活动而导致会话超时[重复]
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)
在该页面上,您不必包含我首先给您的检查代码。
对了,别忘了正确添加<?php
标签!
【讨论】:
所有页面都应该包含session_start吗? @surfinesession_start
到底是什么意思?代码$_SESSION['logged_in'] = true;
?您应该将其放在登录登录页面上。我已经编辑了我的答案。
这对我有用,但是我登录后转到的页面是我的应用程序主页,如果您在不是主页的页面上等待计时器/会话到期,然后单击指向主页的链接,会话将继续。当会话过期时,如何让链接返回主页?同时注销用户?
忽略上述评论。我想到了。我需要做的就是让我的登录页面链接到一个重定向页面,该页面有你的第二个代码块并重定向到主页。然后我只需要在主页上实现你的第一个代码块。谢谢
@AlMar89 太好了,你解决了!以上是关于由于不活动而导致会话超时[重复]的主要内容,如果未能解决你的问题,请参考以下文章