Chrome中的PHP会话问题
我有一个我正在为一个学校项目开发的web应用程序,我的注销页面有问题。当用户单击logout时,它会将其发送到logout.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
<?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()
- 我在做重定向的事情时从不使用“回声”的东西。尝试: 标题(“location:index.php”); 我不知道这是否有效。我只是根据我的假设给你我的分析
希望这些对你有帮助。:) 这似乎有帮助,但不是100%,我可能还有另一个问题。冒着听起来像一个彻头彻尾的傻瓜的风险,@是干什么的?我以前没有见过这种表示法。基本上,@是一个运算符,在表达式前面加上它可以抑制错误消息。@预稀释
@
运算符可以抑制错误。读一读。作为一般规则(尽管如此),应该不惜一切代价避免这种情况——如果您遇到错误,请修复它们,不要隐藏它们。向我们展示check_authorization.php代码。可能存在逻辑错误。我使用META refresh是因为它一直说头已经发送,所以这是我找到的第一个也是最简单的重定向方法,如果你有更好的建议,我会更加开放。我解决了我的问题,上面的代码没有错。我使用的CAS身份验证不是我的,它是针对一个更大的组(一所大学),当我注销时,它正在破坏我的会话,但大学仍然保留cookie中的登录数据,通过删除我能够成功注销的cookie:-)