无法发送会话cookie - 已发送的标头

时间:2012-07-11 23:54:16

标签: php

  

可能重复:
  Headers already sent by PHP

PHP中的以下代码给出了警告。

<?php
    if(!isset($_SESSION))
    {
        session_start();  // line 4
    }

    if(!isset($_SESSION['valid_admin']))
    {
        header("location:Login.php");  //line 9
    }
?>

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\wamp\www\wagafashion\Order.php:8) in C:\wamp\www\wagafashion\Lock.php on line 4

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\wamp\www\wagafashion\Order.php:8) in C:\wamp\www\wagafashion\Lock.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\wagafashion\Order.php:8) in C:\wamp\www\wagafashion\Lock.php on line 9

我在Google上搜索并发现了一个问题here但我到目前为止还不明白那里提到了什么。我怎么能解决它?

[我的应用程序使用上面的代码工作正常,但几天前系统崩溃了蓝屏错误我不得不重新安装它,我安装了不同版本的WAMP。这是问题吗?]

4 个答案:

答案 0 :(得分:2)

<?php
    session_start();

    if(!isset($_SESSION['valid_admin']))
    {
        header("location:Login.php");  //line 9
    }
?>

除非你调用session_start()

,否则永远不会在if语句中设置Session

如果你在if语句之前调用session_start()(就像你应该这样做),你的条件将永远为真,使if语句无用。

因此,您可以将session_start()置于第一个if语句之上,然后删除第一个if语句。

答案 1 :(得分:2)

您还可以在脚本开头使用http://php.net/manual/en/function.ob-start.php功能。

答案 2 :(得分:1)

首先猜测,检查浏览器的空白输出是否对眼睛不可见。

答案 3 :(得分:1)

您似乎误解了session_start()函数:

  

session_start - 启动新会话或恢复现有会话

无需先检查它是否存在。

if(!isset($_SESSION['valid_admin'])){
    header("location:Login.php");  //line 9
} 

注意:

  

从PHP 4.3.3开始,在会话结束后调用session_start()   先前启动将导致E_NOTICE级别的错误。也,   第二个会话开始将被忽略。

根据您的警告消息,您有两个文件:Order.php&amp; Lock.php。您发布的代码位于哪个文件中?包含文件可能会因输出已存在而导致冲突。

  

请记住,在任何实际输出之前必须调用header()   通过普通HTML标记,文件中的空行或PHP发送。   使用include或require读取代码是一个非常常见的错误,   函数或其他文件访问函数,并且有空格或空   调用header()之前输出的行。