php autologout非活动用户

时间:2017-01-03 08:33:13

标签: php debugging

这里的第一次海报,终于决定在我用了太多工作时间试图解决这个问题之后在这里开帐。

所以我有这个“sessionCheck.php”脚本,如果他处于非活动状态,应该注销用户,请参阅下面的代码。现在变量$ inactive = 15;这意味着如果用户处于非活动状态15秒,则应将其注销并重定向到注销页面。然而,由于一些奇怪的原因,这总是花费120秒,无论我将$ inactive设置为15秒,1秒还是60秒,它总是需要120秒。但如果我将变量设置为130,那么它就不会再注销和重定向,只刷新页面。

我不能为我的生活找出原因,因为它看起来并不合乎逻辑。

<?
session_start();

// set timeout period in seconds
$inactive = 15;
// check to see if $_SESSION['timeout'] is set
if(isset($_SESSION['timeout']) ) {
    $session_life = time() - $_SESSION['timeout'];
    if($session_life > $inactive)
        { session_destroy(); header("Location: login.php?loggut");
        $db->Execute("UPDATE tblTimeLog SET LogoutTime = NOW() WHERE sid ='".session_id()."'".$row['konsulentid'].'');

        }
}
$_SESSION['timeout'] = time(); ?>

我的第一个想法是它必须是一些其他脚本覆盖或自动记录用户已经有人干扰此脚本,但如果我运行没有此脚本的测试站点,它根本不会注销。

再次,第一次海报,如果打破任何指导,那么对不起,我相当肯定我没有!所有的帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

我建议在查询后放置标题重定向并退出脚本,这样您就可以确保在尝试注销用户后处理查询并且$_SESSION['timeout']没有更新。

在您再次使用查询中的实际session_id()之前,您也在销毁会话。

尝试一下:

<?
session_start();

// set timeout period in seconds
$inactive = 15;
// check to see if $_SESSION['timeout'] is set
if(isset($_SESSION['timeout']) ) {
    $session_life = time() - $_SESSION['timeout'];
    if($session_life > $inactive)
        { 
               $db->Execute("UPDATE tblTimeLog SET LogoutTime = NOW() WHERE sid ='".session_id()."'".$row['konsulentid'].'');
               session_destroy(); 
               header("Location: login.php?loggut");
               exit(); 
        }
}
$_SESSION['timeout'] = time(); 
?>