问题是,当我的会话到期时,我必须重新加载页面两次才能返回登录页面。 这是我的.htaccess文件
php_flag display_errors on
php_value error_reporting 9999
RewriteEngine On
Options -MultiViews
AddDefaultCharset UTF-8
php_value session.gc_maxlifetime 5
php_value session.gc_divisor 1
php_value session.gc_probability 1
php_value session.cookie_lifetime 5
php_value session.save_path /path/to/session/folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
我正在使用一些自定义MVC框架,我在控制器__construct函数中调用handleLogin()函数
function __construct() {
parent::__construct();
Auth::handleLogin();
}
最后这里是handleLogin()函数
public static function handleLogin() {
@session_start();
if (isset($_SESSION['loggedIn'])) {
$logged = $_SESSION['loggedIn'];
} else {
session_destroy();
header('location: ' . URL . 'login');
exit;
}
}
在会话到期后FIRST刷新后,我需要更改以将用户重定向到登录页面?
提前致谢!
P.S。我在Debian上运行它
更新:这是注销功能,它工作正常,当用户点击它时,他被立即重定向到登录页面
function logout()
{
session_destroy;
header('location: ' . URL . 'login');
exit;
}
更新#2我获得了一些屏幕截图,以便更好地解决问题
1)当会话处于活动状态且一切正常时
2)会话过期 - 用户点击链接或刷新页面(首次刷新后) 你可以注意到firebug登录已加载,但它没有显示
3)第二次刷新后
还有一件事是..当使用默认 php.ini设置(会话生命周期:1440秒)时,everthing工作正常,重定向没有问题
答案 0 :(得分:0)
我认为您必须创建一个注销功能,您必须编写会话销毁然后重定向。因此,当用户单击他的注销链接时,您可以销毁他的会话变量,然后再次重定向到登录页面。
如果您使用ajax回调来销毁会话,那么您必须在javascript中刷新页面以将用户重定向到登录页面
答案 1 :(得分:0)
我找到了导致错误的原因,但我不确定为什么它会导致这样一个愚蠢的错误。
我的代码前面有session_set_cookie_params(0);
,而我的浏览器一直打开,我更改了代码,删除了session_set_cookie_params(0);
并添加了php_value session.gc_maxlifetime 5
。这就是造成冲突的原因。一方预计会话持续到浏览器关闭,另一方在5秒后终止会话。我清理了100次缓存,直到我关闭浏览器并重新打开项目后才发生任何事情。