我有一段代码,会话变量可以持续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' ) ;
}
答案 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登录的用户。即使您不使用库来促进这一点,您也可以使用相同的概念来开发自己的检查访客身份的方法。