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 :(得分: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()之前输出的行。