我可以在会话达到maxlife后将用户注销

时间:2012-09-26 17:01:47

标签: php

我有一段代码,会话变量可以持续12个小时:

ini_set('session.gc_maxlifetime',12*60*60);
ini_set('session.gc_divisor', '1');
ini_set('session.gc_probability', '1');
ini_set('session.cookie_lifetime', '0');

但我的问题是,有可能在12小时过后将用户注销并且会话变量已过期吗?换句话说,我有一个teacherlogout.php页面,经过12个小时后,一旦用户导航到另一个页面或在12小时后刷新页面,它会将用户重定向到注销页面吗?

更新:

这可行吗?

if ((isset($username)) && (isset($userid))){

...//WHOLE CODE

}else{

header( 'Location: teacherlogout.php' ) ;
}

2 个答案:

答案 0 :(得分:0)

我会在客户端上实施一些轮询。伪代码:

<强> PHP

// hasSession.php
echo (isset($_SESSION['user_id'])); // bool

<强>的JavaScript

// Poll server
function checkSession() {

    // Assuming the function passes along the truthy or falsy response
    if (ajaxCallToHasSessionPHPResponse()) {
        setTimeout(checkSession, 10000); // Check again in 10 seconds
    } else {
        window.location = '/logout.php';
    }
}
checkSession();

答案 1 :(得分:0)

我建议不要检查变量的状态,例如将register globals设置为true或者严格程度忽略未定义的变量,可能会让代码对很难检测到的漏洞开放。

此问题的已接受答案How do check if a PHP session is empty?

是检查访问者状态的最典型方法。然而,有些图书馆致力于使这种系统结构化和高效。

请仔细阅读:http://www.phpeveryday.com/articles/Zend-Framework-Login-Creating-Authentication-P566.html

它描述的是一种使用Zend库来确定当前访问者是否具有身份的方法,在这种情况下是使用针对用户名的会话ID登录的用户。即使您不使用库来促进这一点,您也可以使用相同的概念来开发自己的检查访客身份的方法。