2013-03-15 35 views
0

我發現我得到這個錯誤的原因,我的代碼沒有錯,所以我從我的帖子中刪除它。php setcookie()不工作 - 無法修改標題信息

我的php頁面被編碼爲UTF-8,但它必須被編碼爲沒有BOM(字節順序標記)的UTF-8。

據我所知,BOM被解釋爲輸出,或者至少創建一個。

感謝您的所有答案,我的問題是重複的,我爲此道歉,我看了其他帖子,但還不夠遠。謝謝 !

+0

完整的錯誤消息可能會告訴你,當頭部都是一模一樣發送(什麼文件,什麼線)幫助。 – jeroen 2013-03-15 01:51:52

+0

繼承人提示使用輸出緩衝功能來知道如何延遲腳本輸出。 – 2013-03-15 01:57:31

+0

頭文件已經由(在/***/log.php:1開始的輸出)發送到/***/library.php在156行(log.php對應於第一個代碼塊和行156是我設置cookie的行) – blex 2013-03-15 01:57:44

回答

0

如果您在使用setcookie之前完成了HTML輸出,則需要找到HTML輸出開始的位置。在該行的上方放置將開始輸出緩衝的功能ob_start Docs

啓用輸出緩衝後,您的程序仍然可以「輸出」HTML,但不會立即發送。那麼你應該能夠調用的setcookie,沒有任何問題:

<?php 
    function login($username,$pwd) 
    { 
     $mysqli=dbconnect(); //no output 
     $query = "SELECT * FROM `users` WHERE `name`='$username' AND `password`='$pwd'"; 
     $result = $mysqli->query($query) or die($mysqli->error.__LINE__); 
     if($result->num_rows == 1) { 
      while($row = $result->fetch_assoc()) { 
       ob_start(); //set output buffering before setting cookies.. 
       setcookie("ID", $row['userid'], time()+3600*24*365); 
       ob_end_flush(); // flush data 
       if (isset($_COOKIE['UNIQUE_ID'])) 
        {echo 'Connected';} 
       else{echo 'No cookie today :(';} 
      } 
     } 
     dbclose($mysqli); //no output 
    } 
    ?> 

輸出緩衝器將被自動發送到瀏覽器時,你的腳本結束,所以沒有太多的越多,你需要關心,剩下的自動工作。

+0

對不起,沒用。我需要'沖水'或類似的東西嗎? – blex 2013-03-15 02:10:21

+0

是的,你可以嘗試在我給定的鏈接中使用輸出緩衝的任何組合..不要忘記每當你啓動你必須結束..所以當你使用ob_start()做flush數據。 – 2013-03-15 02:17:23

+0

嘗試使用printf ,回聲,打印以迴應你的設置cookie,如果存在這將有助於如果cookie已經設置... – 2013-03-15 02:36:22

0

嘗試在打開標記之前刪除所有空白區域。

結束標籤是可選的,與白色空間被誤讀爲輸出