PHP会话问题在Chrome浏览器


PHP Session issues in Chrome

我有一个web应用程序,我正在开发一个学校项目,我有注销页面的问题。当用户单击logout时,它会将其发送到logout.php,如下所示:

<?php include ("includes/check_authorization.php");
    // Unset the session and destroy it
    session_unset();
    session_destroy();
    // Redirect to the home page
    echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">';
    exit;
?>

非常简单,但它会取消设置,然后销毁会话,并重定向到索引,即登录页面。然而,当这是运行索引立即重定向到用户的主页。顶部包含的check_authorization页面将重定向某人登录,如果用户名和id没有在$_SESSION中设置和匹配,那么这意味着它正在为我设置这些?我真的很困惑这是怎么发生的。我使用CAS进行认证。

编辑:check_authorization.php还初始化会话以及检查那些键值

对于这种情况,我做了如下操作,这对我所有的浏览器都有效,

@session_unset();
$old_sessid = @session_id();
@session_regenerate_id();
$new_sessid = session_id();
@session_id($old_sessid);
@session_destroy();

与其取消设置数据,不如尝试为会话分配一个虚拟值,如:

$_SESSION['authKey'] = '!!INVALID!!';
session_unset();
session_destroy();

即使会话"恢复",由于"假"数据,身份验证也不可能再成功。

有以下几种可能性:

  • 最简单的可能是:你有没有把

    session_start ();

在文件顶部?在包含文件之前?我以前也经历过,那让我很生气。

  • 第二种可能:试着把

    session_regenerate_id ();

放在文件的最顶部(在声明session_start();之前)。因为在一些服务器托管中,他们的配置仍然使用"LINUX"风格,我无法在这里向你解释。但是,关键是他们总是使用"缓存"当你重定向。换句话说,当重定向到另一个页面时,总是重定向到"缓存"页面。看到. .这很难向你解释。但只是尝试session_regenerate_id();代码,也许它会工作。

  • 我在做重定向时从不使用"echo"之类的东西。试一试:

    头(地点:index . php);我不知道这是否有效。

希望这些有帮助。:)