PHP $ _SESSION没有按预期工作

时间:2010-03-02 02:10:24

标签: php session login logout

我有一个PHP网站,我正在维护,我已经确认这一点有效。

我们有一个使用登录系统的网站,该系统将登录用户的信息存储在$_SESSION['user']变量中。用于在单击 /logout.php 时注销用户的网站基本上删除了该部分会话,然后header()重定向到主页。

截至最近,当session_start()用于输出调试时,顶部有print_r() /logout.php 文件以某种方式看不到会话信息目的。

如果我转到另一个页面,我会看到会话信息很好,但不会在注销页面上...这正是我无法删除会话信息的原因,因为它无法访问。

我认为$_SESSION在网站上是全局的,直到浏览器关闭。我从来没有遇到这种情况,我知道会话实例是在这个页面上启动的,所以它没有向我显示会话数据,这很奇怪。

有什么想法吗?我完全被这个难倒了!

代码:/logout.php

<?
#session_start() is inside this file
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');

unset($_SESSION['user']);
header("location: /");
exit();
?>

$_SESSION['user']的检查是在整个网站范围内的,当需要不同的东西时,我会调用它下面的各种项目。其他人建立了这个网站,我正在尝试调试它为什么不能突然为它们工作。

3 个答案:

答案 0 :(得分:3)

如果域/子域与页面的其余部分相同,我会说这听起来像典型的会话与输出错误。确保已启用所有错误并显示它们,因为您可能在调用session_start()之前将输出打印到客户端。这将破坏功能并使会话不可用。

要解决问题(如果是这种情况),您应该删除session_start之前的所有输出。甚至<?php之前的空格也将被Apache(和其他)视为输出。还要确保你已经在文档中禁用了BOM(字节顺序标记)(任何体面的编辑器都可以让你改变它,只需查找类似“当前文件设置”的内容)。

答案 1 :(得分:2)

永远记住你的PHP代码的第一行应该是session_start();而不是别的。如果您要做的就是取消设置会话变量并销毁会话,请尝试删除require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');并在logout.php文件的末尾添加session_start()和session_destroy(),看看它是否有效。

答案 2 :(得分:0)

您是否从设置会话开始时的相同的域访问logout.php(例如example.com与www.example.com/logout.php)

至于取消设置特定会话数据,最好拨打session_destroy(),然后取消设置Cookie以终止会话。