我有一些代码会在x秒不活动后将用户注销。问题是它在指定的时间之前将它们记录下来,它甚至不计算不活动。
这是代码:
<?php
$_SESSION['loginTime'] = time();
if($_SESSION['loginTime'] < time()+10*60){
$error_msg ="Logged out due to inactivity";
showLoginPasswordProtect($error_msg);
session_destroy();
}
?
答案 0 :(得分:1)
好$_SESSION['loginTime']
是他们登录的时间戳(希望)总是小于当前时间戳,因为你每秒都加一个。所以你需要这样做:
<?php
if($_SESSION['loginTime'] + 600 < time()){
$error_msg ="Logged out due to inactivity";
showLoginPasswordProtect($error_msg);
session_destroy();
}
?>
这样,如果已经过了600秒,它将运行语句。
答案 1 :(得分:0)
您需要在单独的脚本中设置$_SESSION['loginTime']
,可能是在用户通过身份验证后。
然后在此脚本中,您需要确定会话时间与当前时间之间的差异,然后查看它是否大于超时阈值。
例如:
if( (time() - $_SESSION['loginTime'] ) > 10*60) { ... }
答案 2 :(得分:0)
看看你的剧本在做什么:
$_SESSION['loginTime'] = time();
...将'loginTime'设置为当前时间。假设当前时间是'10'
if($_SESSION['loginTime'] < time()+10*60)
...因为我们假设当前时间是10,然后time()+10*60
变为10+10*60 = 610
,而if()变为:if (10 < 610) {
因此,您的代码将始终注销用户,因为您的逻辑已损坏。
您需要在登录脚本中设置loginTime
ONCE,而不是像现在一样每次都设置它。