php setcookie()不起作用-无法修改标头信息


php setcookie() not working - Cannot modify header information

我发现了我得到这个错误的原因,我的代码没有任何问题,所以我从我的帖子中删除了它。

我的php页面被编码为UTF-8,但它必须被编码为UTF-8 WITHOUT BOM(字节顺序标记)

根据我的理解,BOM被解释为输出,或者至少创建一个输出。

谢谢你所有的回答,我的问题是重复的,我为此道歉,我看了其他帖子,但不够远。谢谢!

如果在使用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
    }
    ?>

当脚本完成时,输出缓冲区将自动发送到浏览器,因此您不需要关心太多,其余部分自动工作。

尝试在开始标记之前删除所有空白。

结束标记是可选的,可能有助于避免将空白解释为输出