警告:不能更改头信息 - 头已经发出已
我收到关于“头已经发送”错误,当我成功登录到页面中。
这里是我的代码与登录交易:
<?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);
?>
所以基本上这是什么做的是,如果你用正确的信息登录,将设置3个曲奇,您的用户名,密码和一个检查另外两个。
但是当我做成功登录,我得到这些错误:
警告:不能更改头信息 - 头已经发出(输出开始/home/scott/web/forum/index.php :18)in /home/scott/web/forum/index.php on line 19
警告:无法修改标头信息 - 已经发送的标头(在/home/scott/web/forum/index.php处开始输出:18)/home/scott/web/forum/index.php在线20
警告:不能更改头信息 - 头已经SE NT在/home/scott/web/forum/index.php(输出开始/home/scott/web/forum/index.php:18)第21行
我在做什么错?
你有可能你setcookie
调用之前发生的回声。
header
或setcookie
或其他任何发送HTTP标头的东西必须在任何其他输出之前完成,否则您会得到该警告/错误。
此外,你应该检查config.php文件,以确保有收?>
PHP的标签之后没有尾随空白。请记住...任何不包含在<?php ... ?>
中的内容都被php解析器视为输出,并且会得到“echo'd”。
谢谢,伙计!有用! – Scott 2010-07-06 23:29:04
它看起来像问题来了,当你设置的会话cookie。也许你想在设置它们之前检查它们是否存在,如果它们确实存在,则采取其他措施。
OK,这可能是愚蠢的 - 我甚至没有深入到你的代码 - 但开幕前<?php
这个空白?另外,我会检查config.php
以确保在打开和关闭标记之外没有空白。
您设置的cookies前写“正确”输出流。当您开始写入页面时,首先会写入HTML标头。随着Cookie进入标题,您必须在开始写入页面之前设置它们。
首先,我希望你喜欢SQL注入,因为你已经有了它。其次,你应该哈希你的密码。 – Kalium 2010-07-06 23:06:27
删除了SQL相关标签,因为标头仅限于HTTP。 – 2010-07-06 23:10:54
更不用说将实际密码存储在数据库及其cookie中。有史以来最差的安全性。 – animuson 2010-07-06 23:11:03