2010-07-06 64 views
0

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

所以基本上这是什么做的是,如果你用正确的信息登录,将设置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行

我在做什么错?

+4

首先,我希望你喜欢SQL注入,因为你已经有了它。其次,你应该哈希你的密码。 – Kalium 2010-07-06 23:06:27

+0

删除了SQL相关标签,因为标头仅限于HTTP。 – 2010-07-06 23:10:54

+1

更不用说将实际密码存储在数据库及其cookie中。有史以来最差的安全性。 – animuson 2010-07-06 23:11:03

回答

4

你有可能你setcookie调用之前发生的回声。

headersetcookie或其他任何发送HTTP标头的东西必须在任何其他输出之前完成,否则您会得到该警告/错误。

此外,你应该检查config.php文件,以确保有收?> PHP的标签之后没有尾随空白。请记住...任何不包含在<?php ... ?>中的内容都被php解析器视为输出,并且会得到“echo'd”。

+0

谢谢,伙计!有用! – Scott 2010-07-06 23:29:04

0

它看起来像问题来了,当你设置的会话cookie。也许你想在设置它们之前检查它们是否存在,如果它们确实存在,则采取其他措施。

1

OK,这可能是愚蠢的 - 我甚至没有深入到你的代码 - 但开幕前<?php这个空白?另外,我会检查config.php以确保在打开和关闭标记之外没有空白。

0

您设置的cookies前写“正确”输出流。当您开始写入页面时,首先会写入HTML标头。随着Cookie进入标题,您必须在开始写入页面之前设置它们。

相关问题