【问题标题】:PHP Session timeout, problem with codePHP会话超时,代码问题
【发布时间】:2010-06-18 16:58:03
【问题描述】:

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

这是代码:

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

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

 showLoginPasswordProtect($error_msg); 

session_destroy();
    }
    ?

【问题讨论】:

  • 因为登录时间总是小于 time()+ 任何东西!?

标签: php session timeout


【解决方案1】:

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

<?php

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

    showLoginPasswordProtect($error_msg); 

    session_destroy();
}
?>

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

【讨论】:

    【解决方案2】:

    看看你的脚本在做什么:

    1. $_SESSION['loginTime'] = time();

    ... 将“loginTime”设置为当前时间。假设当前时间是'10'

    1. if($_SESSION['loginTime'] &lt; time()+10*60)

    ...既然我们假设当前时间是 10,那么 time()+10*60 变成 10+10*60 = 610,if() 变成:if (10 &lt; 610) {

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

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

    【讨论】:

      【解决方案3】:

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

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

      例如:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多