2010-07-06 71 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進入標題,您必須在開始寫入頁面之前設置它們。

相關問題