2010-06-18 91 views
0

我有一些代码会在用户闲置x秒后记录用户。问题是它在指定的时间之前将它们注销,甚至不计算不活动。PHP会话超时,代码问题

这是代码:

<?php 
    $_SESSION['loginTime'] = time(); 

    if($_SESSION['loginTime'] < time()+10*60){ 
     $error_msg ="Logged out due to inactivity"; 

showLoginPasswordProtect($error_msg); 

session_destroy(); 
    } 
    ? 
+1

因为登录时间总是少于time()+任何东西!? – 2010-06-18 17:03:42

回答

0

你需要设置$_SESSION['loginTime']在一个单独的脚本,用户通过身份验证后,大概。

然后在这个脚本中,你需要找出会话时间和当前时间之间的差异,然后看看它是否大于你的超时阈值。

例如:

if((time() - $_SESSION['loginTime']) > 10*60) { ... } 
1

$_SESSION['loginTime']是他们登录(希望)时间戳将始终小于当前的时间戳,因为你加一个每一秒。所以你需要这样做:

<?php 

if($_SESSION['loginTime'] + 600 < time()){ 
    $error_msg ="Logged out due to inactivity"; 

    showLoginPasswordProtect($error_msg); 

    session_destroy(); 
} 
?> 

这样,如果600秒过去了,它将运行语句。

0

看看你的脚本是这样做的:

  1. $_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,而不是像现在这样每次都设置它。