我有一个PHP的网站,我保持我已经确认这在一个点上的工作。

我们必须利用它存储在用户的$_SESSION['user']可变信息的记录了登录系统网站。所使用的位点,当点击注销用户的 /logout.php 其基本上除去该会话的部分,然后header()重定向到主页。

的最近为,所述的 /logout.php 在顶部session_start()文件不知何故不看会话信息时print_r()用来输出它用于调试目的。

如果我去到另一个网页,我看到会话信息就好了,但不登出页面...这就是为什么我不能删除会话信息,因为它是不可访问的。

我想$_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']的检查是站点范围和我呼叫需要不同的东西时的各种物品在其下方。其他人建立了这个网站,我试图调试为什么它不为他们工作,一下子。

有帮助吗?

解决方案

您访问logout.php的完全相同域所设置的会话开始与(即example.com与www.example.com/logout.php)

对于刚刚解封特定的会话数据,这将是最好打电话session_destroy(),然后取消设置你的cookies,终止会话。

其他提示

如果该站点/子是一样的页面的其余部分,我会说这听起来像一个典型的会话与输出错误。请确保您启用了所有的错误,并显示出来,你可能已经打印输出到客户端调用session_start()之前。这将中断的功能和使会话不可用。

要解决这个问题(如果它是这种情况),则应该session_start之前除去所有输出。即使<?php前的空间将被Apache(以及其他),被视为输出。另外,还要确保你已经禁用了BOM(字节顺序标记)的文件中(任何像样的编辑器将让你改变这一点,只要看看像“当前文件setings”)。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top