Chrome中的PHP会话问题

Chrome中的PHP会话问题,php,html,session,session-variables,Php,Html,Session,Session Variables,我有一个我正在为一个学校项目开发的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 e

我有一个我正在为一个学校项目开发的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;
?>

这非常简单,但它将取消设置,然后销毁会话,并重定向到索引,即登录页面。但是,当运行此操作时,索引将重定向到用户主页。如果用户名和id在$会话中未设置和匹配,顶部包含的check_authorization页面将重定向某人登录,这意味着它正在为我设置这些?我真的很困惑这是怎么发生的。我正在使用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();

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

有一些可能性:

  • 最简单的可能性是:你是否包括了

    会话_start()

在档案上?在包含文件之前?我以前去过那里,这让我很生气

  • 第二种可能性:试着把

    会话_重新生成_id()

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

  • 我在做重定向的事情时从不使用“回声”的东西。尝试:

    标题(“location:index.php”); 我不知道这是否有效。我只是根据我的假设给你我的分析


希望这些对你有帮助。:)

这似乎有帮助,但不是100%,我可能还有另一个问题。冒着听起来像一个彻头彻尾的傻瓜的风险,@是干什么的?我以前没有见过这种表示法。基本上,@是一个运算符,在表达式前面加上它可以抑制错误消息。@预稀释
@
运算符可以抑制错误。读一读。作为一般规则(尽管如此),应该不惜一切代价避免这种情况——如果您遇到错误,请修复它们,不要隐藏它们。向我们展示check_authorization.php代码。可能存在逻辑错误。我使用META refresh是因为它一直说头已经发送,所以这是我找到的第一个也是最简单的重定向方法,如果你有更好的建议,我会更加开放。我解决了我的问题,上面的代码没有错。我使用的CAS身份验证不是我的,它是针对一个更大的组(一所大学),当我注销时,它正在破坏我的会话,但大学仍然保留cookie中的登录数据,通过删除我能够成功注销的cookie:-)