无法发送会话cookie - 标题已经发出已

无法发送会话cookie - 标题已经发出已

问题描述:

可能重复:
Headers already sent by PHP无法发送会话cookie - 标题已经发出已

在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。这是什么问题?]

+0

MOST询问S.O的PHP问题请先搜索。 – 2012-07-12 00:32:46

<?php 
    session_start(); 

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

会议决不会被设置在if语句,除非你调用session_start()

如果if语句之前调用session_start()(像你应该做的事)你条件将始终为真,使if语句无用。

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

+0

谢谢,但我已经尝试过。它也以相同的警告结束。实际上,我的原始项目中没有“if(!isset($ _ SESSION))”条件。我刚刚尝试了解它是否有所作为。 – Tiny 2012-07-11 23:59:26

+0

此代码必须放在ANY之前才能使用。请将整个文档包含在OP中,并将我发布的代码放在最上面。 – maxhud 2012-07-12 00:01:51

+0

该文件包含问题中提到的唯一代码。 – Tiny 2012-07-12 00:04:14

首先猜测,检查输出到浏览器的空白输出是否立即可见。

看来你误解了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。哪些文件是您的发布代码位于?包含文件可能会由于输出已存在而导致冲突。

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

+0

谢谢,但我已经尝试过。它也以相同的警告结束。实际上,我的原始项目中没有“if(!isset($ _ SESSION))”条件。我刚刚尝试了解它是否有所作为。 – Tiny 2012-07-12 00:04:53

+0

请参阅我的编辑并提供更多详细信息。 – RobB 2012-07-12 00:05:34

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

+1

并检查您是否使用没有BOM的UTF-8 – mrok 2012-07-12 00:07:10