2013-03-15 88 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

尝试在打开标记之前删除所有空白区域。

结束标签是可选的,与白色空间被误读为输出