3

可能重复:
PHP 已发送的标头

我在注销 php 文件时session_start()遇到问题。header('Location:')

我正在使用 html 文件中的简单锚标记链接到注销文件。注销 php 文件是这样的:

<?php
session_start();
session_destroy();
header("Location: index.php");
?> 

要查看我使用的错误在哪里,

error_reporting(E_ALL);
ini_set('display_errors', '1');

我在第 4 行(在哪里)收到警告“警告:session_start():无法发送会话缓存限制器 - 标头已发送”session_start();和警告:无法修改标头信息 - 第 6 行(在哪里header('Location'))已发送标头。

我环顾了其他有类似问题的人。我确保 . 之前没有空格session_start()。在它之前没有输出任何东西。session_start()如果尚未设置,我只尝试设置。我试过用ob_start(). 我尝试了重定向的相对和绝对路径以确保。但没有任何效果。

我错过了什么吗?任何帮助深表感谢。

4

4 回答 4

8

查看物料清单

http://en.wikipedia.org/wiki/Byte_order_mark

在记事本++ - 编码 - > utf8 没有BOM

编辑

只是评论 - 你应该使用退出;按照http://php.net/manual/en/function.header.php中的建议,在 header("Location...") 之后确保不会运行其他任何内容

于 2012-12-16T14:17:06.397 回答
0

PHP *session_destroy()* 只是问题的一部分。您还需要从 $_SESSION 数组中显式删除数据。您可能还需要清理 cookie。如果您同时打开了多个浏览器实例(窗口或选项卡),则无法成功测试——它们都共享同一个 cookie jar,因此共享同一个 PHP 会话。

您也许可以阅读此链接: http ://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_2391-PHP-login-logout-and-easy-access-control.html

此代码是一个很好的注销示例。

<?php
session_start();
// CLEAR THE INFORMATION FROM THE $_SESSION ARRAY
$_SESSION = array();

// IF THE SESSION IS KEPT IN COOKIE, FORCE SESSION COOKIE TO EXPIRE
if (isset($_COOKIE[session_name()]))
{
   setcookie(session_name(), '', $cookie_expires, '/');
}

// TELL PHP TO ELIMINATE THE SESSION
session_destroy();

// SAY GOODBYE...
echo "YOU ARE LOGGED OUT$uid.  GOODBYE.";

// OR REMOVE THE GOODBYE MESSAGE AND ACTIVATE THESE LINES TO REDIRECT TO THE HOME PAGE
// header("Location: /");
// exit;
于 2012-12-16T14:25:13.733 回答
0

有时,已知结束?>标签会导致此问题。在一个只包含 PHP 的文件中,删除?>几乎总能解决headers already sent我的问题。

于 2012-12-16T14:19:30.610 回答
-3

复制粘贴这个

<?
session_start();
session_unset();
session_destroy();
ob_start();
header("location:home.php");
ob_end_flush();
exit();
?>
于 2012-12-16T14:30:14.007 回答