PHP session 过期但页面刷新后我没有重定向

标签 php .htaccess session model-view-controller

问题是,当我的 session 到期时,我必须重新加载页面两次才能返回登录页面。 这是我的 .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 框架,我在 Controller 中调用 handleLogin() 函数 __construct 函数

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;
    }
}

在 session 过期时第一次刷新后,我需要更改什么才能将用户重定向到登录页面?

提前致谢!

附言我在 Debian 上运行它

更新:这里是注销功能,它工作正常,当用户点击它时,他立即被重定向到登录页面

function logout()
{
    session_destroy;
    header('location: ' . URL .  'login');
    exit;
} 

更新 #2 我得到了一些截图以更好地描述问题

1) 当 session 处于事件状态并且一切正常时 enter image description here

2) session 过期 - 用户点击链接或刷新页面(第一次刷新后) 正如您在 Firebug 中注意到的那样,登录已加载但未显示 enter image description here

3) 第二次刷新后 enter image description here

还有一件事是.. 当使用默认的 php.ini 设置( session 生命周期:1440 秒)一切正常,重定向没有问题

最佳答案

我认为您必须创建一个注销函数,您必须在其中编写 session 销毁然后重定向。因此,当用户单击他的注销链接时,您可以销毁他的 session 变量,然后再次重定向到登录页面。

如果您使用 ajax 回调来销毁 session ,那么您必须在 javascript 中刷新页面以将用户重定向到登录页面

关于PHP session 过期但页面刷新后我没有重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19489392/

相关文章:

apache - 从 Laravel 的 URL 中删除 index.php

.htaccess - htaccess 垂直条(管道)的重写条件

apache - Ratchet 网络套接字 SSL

php - 在同一页面上提交表单时如何预填充下拉列表?

php - 获取 header 响应代码

php - PDO - 连接查询并输出正确的数据

php - 如何在列表中显示MySQL数据

javascript - jQuery 只为被点击的元素运行函数

node.js - 使用 node.js 和 session.socket.io 进行安全身份验证?

JSF 注销其他用户,同时保持我的事件 session 。