我使用以下代码使会话无效。我在许多页面中都链接到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>
有什么问题?
答案 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');
您也不需要取消设置。