0

我在下面有一段代码,其中会话变量可以持续 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' ) ;
}
4

2 回答 2

0

我不建议检查变量的状态,因为在寄存器全局设置为 true 或未定义的变量被严格级别忽略的情况下,可能会使您的代码容易发现难以检测的漏洞。

这个问题的公认答案How do check if a PHP session is empty?

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

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

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

于 2012-09-26T17:48:29.780 回答
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();
于 2012-09-26T17:37:42.477 回答