警告:无法修改标头信息 - 已发送的标头

时间:2010-07-06 23:01:47

标签: php cookies header

  

可能重复:
  Headers already sent by PHP

当我成功登录页面时,我收到有关“已发送的标头”的错误。

这是我处理登录的代码:

<?php
include("config.php");
$eUsername = $_POST['username'];
$ePassword = $_POST['password'];

$con = mysql_connect("localhost","MY_USERNAME","MY_PASSWORD");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("forum", $con);
$result = mysql_query("SELECT * FROM members WHERE username = '$eUsername'");

while($row = mysql_fetch_array($result))
  {
    if ($ePassword==$row['password']) {
      echo "Correct";
       setcookie("loggedIn", "true", time()+1000000000);
       setcookie("logUsername", "$eUsername", time()+100000000);
       setcookie("logPassword", "$ePassword", time()+100000000);
    }
    else {
      echo "Incorrect username/password.  Please try again.";
    }
  }
mysql_close($con);
if ($_COOKIE['loggedIn']=="true") {
$curURL=basename($_SERVER['SCRIPT_NAME']);
echo "You are already logged in.  <a href='$curURL?lo=true'>Log out?</a>";
}
echo "<br /><br />";
print_r($_COOKIE);
?>

所以基本上这样做是因为如果你使用正确的信息登录,它会设置三个cookie,你的用户名,密码和一个来检查另外两个。

但是当我成功登录时,我收到了这些错误:

  

警告:无法修改标题信息 - 第19行/home/scott/web/forum/index.php中已经发送的标题(在/home/scott/web/forum/index.php:18中开始输出)< / p>      

警告:无法修改标题信息 - 已在第20行的/home/scott/web/forum/index.php中发送的标题(在/home/scott/web/forum/index.php:18中开始输出)< / p>      

警告:无法修改标题信息 - 第21行/home/scott/web/forum/index.php已经发送的标题(在/home/scott/web/forum/index.php:18开始输出)< / p>

我做错了什么?

4 个答案:

答案 0 :(得分:4)

setcookie来电之前,您可能会收到回音。

headersetcookie或其他任何发送HTTP标头的内容都必须在任何其他输出之前完成,否则您将收到该警告/错误。

此外,您应该检查config.php以确保在关闭?> php标记后没有尾随空格。请记住...... <?php ... ?>中没有包含的内容被php解析器视为输出,并且会“回显”出来。

答案 1 :(得分:1)

好吧,这可能是愚蠢的 - 我甚至没有深入研究你的代码 - 但是在开幕<?php之前是这个空白吗?另外,我会检查config.php以确保开始和结束标记之外没有空格。

答案 2 :(得分:0)

当您设置会话cookie时,似乎问题就出现了。也许你想在设置之前检查它们是否存在,如果它们确实存在,请采取其他措施。

答案 3 :(得分:0)

在设置cookie之前,您正在向输出流写“正确”。当您开始写入页面时,首先写入HTML标题。当cookie进入标题时,你必须在开始写入页面之前设置它们。

相关问题