PHP会话超时,代码问题

时间:2010-06-18 16:58:04

标签: php session timeout

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

这是代码:

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

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

 showLoginPasswordProtect($error_msg); 

session_destroy();
    }
    ?

3 个答案:

答案 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)

看看你的剧本在做什么:

  1. $_SESSION['loginTime'] = time();
  2. ...将'loginTime'设置为当前时间。假设当前时间是'10'

    1. if($_SESSION['loginTime'] < time()+10*60)
    2. ...因为我们假设当前时间是10,然后time()+10*60变为10+10*60 = 610,而if()变为:if (10 < 610) {

      因此,您的代码将始终注销用户,因为您的逻辑已损坏。

      您需要在登录脚本中设置loginTime ONCE,而不是像现在一样每次都设置它。