session_start()和header('location:')重定向

时间:2012-12-16 14:14:24

标签: php

  

可能重复:
  Headers already sent by 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');

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

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

我错过了什么吗?非常感谢任何帮助。

4 个答案:

答案 0 :(得分:9)

检查BOM

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

in notepad ++ - encoding - &gt;没有BOM的utf8

修改

只是评论 - 你应该使用退出;在标题(“位置...”)之后,确保不会按照http://php.net/manual/en/function.header.php

中的建议运行其他任何内容

答案 1 :(得分:0)

有时,结尾?>标记会导致此问题。在包含PHP而不包含任何其他内容的文件中,删除?>几乎总是为我解决了headers already sent个问题。

答案 2 :(得分: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;

答案 3 :(得分:-3)

复制粘贴此

<?
session_start();
session_unset();
session_destroy();
ob_start();
header("location:home.php");
ob_end_flush();
exit();
?>