0

可能重复:
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

我在谷歌上搜索并在这里找到了一个问题,但到目前为止我不明白那里提到的内容。我该如何解决?

[我使用上述代码的应用程序运行良好,但几天前系统因蓝屏错误而崩溃,我不得不在安装不同版本的 WAMP 的地方重新安装它。是这个问题吗?】

4

4 回答 4

2
<?php
    session_start();

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

除非您调用 session_start() 否则将永远不会在该 if 语句中设置会话

如果您在 if 语句之前调用 session_start() (就像您应该做的那样),您的条件将始终为真,从而使 if 语句无用。

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

于 2012-07-11T23:56:09.897 回答
2

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

于 2012-07-12T00:05:26.163 回答
1

首先猜测,检查浏览器是否有肉眼无法立即看到的空白输出。

于 2012-07-11T23:56:25.560 回答
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& Lock.php。您发布的代码位于这些文件中的哪一个?由于输出已经存在,包含文件可能会导致冲突。

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

于 2012-07-11T23:58:56.437 回答