PHP会话问题

时间:2009-08-30 13:26:17

标签: php session

我使用以下代码使会话无效。我在许多页面中都链接到logout.php。如果单击该注销链接,则会调用logout.php页面。以下是logout.php中的代码。

unset($_SESSION['admin']);
session_destroy();
header('Location: index.php');

会话无效后,我想打开页面index.php。 但我发现以下错误:

  

警告:session_destroy()[function.session-destroy]:尝试在第3行的C:\ xampp \ htdocs \ Selection \ logout.php中销毁未初始化的会话

     

警告:无法修改标头信息 - 已在第4行的C:\ xampp \ htdocs \ Selection \ logout.php中发送的标头(输出从C:\ xampp \ htdocs \ Selection \ logout.php:3开始)< / p>

有什么问题?

5 个答案:

答案 0 :(得分:16)

我认为在破坏会话之前你不能调用session_start()函数。

答案 1 :(得分:8)

你需要在页面顶部调用session_start()来提醒php这个页面调用属于会话。 - 至少PHP manual告诉你。

该手册页上的注释提示,session_unset()仅用于未使用$ _SESSION变量的旧环境。

答案 2 :(得分:2)

您必须先打开会话:

header('Location: index.php');
session_start();
session_unset();
session_destroy();

答案 3 :(得分:1)

问题是您无法销毁尚未启动的会话。然后,这会引发一个警告,该警告正在回显给浏览器。下一个问题是,在输出到浏览器后你无法发送标题,因此它会引发另一个警告。

您只需要先检查会话是否存在:

if (session_name() != '') {
    session_destroy();
}

答案 4 :(得分:0)

你必须始终使用session_start();在使用会话功能/变量之前。因此,使用session_start();启动所有PHP文件。还有logout.php:

session_start();
session_destroy();
header('Location: index.php');

您也不需要取消设置。