我发现我得到这个错误的原因,我的代码没有错,所以我从我的帖子中删除它。php setcookie()不工作 - 无法修改标题信息
我的php页面被编码为UTF-8,但它必须被编码为没有BOM(字节顺序标记)的UTF-8。
据我所知,BOM被解释为输出,或者至少创建一个。
感谢您的所有答案,我的问题是重复的,我为此道歉,我看了其他帖子,但还不够远。谢谢 !
我发现我得到这个错误的原因,我的代码没有错,所以我从我的帖子中删除它。php setcookie()不工作 - 无法修改标题信息
我的php页面被编码为UTF-8,但它必须被编码为没有BOM(字节顺序标记)的UTF-8。
据我所知,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
}
?>
输出缓冲器将被自动发送到浏览器时,你的脚本结束,所以没有太多的越多,你需要关心,剩下的自动工作。
对不起,没用。我需要'冲水'或类似的东西吗? – blex 2013-03-15 02:10:21
是的,你可以尝试在我给定的链接中使用输出缓冲的任何组合..不要忘记每当你启动你必须结束..所以当你使用ob_start()做flush数据。 – 2013-03-15 02:17:23
尝试使用printf ,回声,打印以回应你的设置cookie,如果存在这将有助于如果cookie已经设置... – 2013-03-15 02:36:22
尝试在打开标记之前删除所有空白区域。
结束标签是可选的,与白色空间被误读为输出
完整的错误消息可能会告诉你,当头部都是一模一样发送(什么文件,什么线)帮助。 – jeroen 2013-03-15 01:51:52
继承人提示使用输出缓冲功能来知道如何延迟脚本输出。 – 2013-03-15 01:57:31
头文件已经由(在/***/log.php:1开始的输出)发送到/***/library.php在156行(log.php对应于第一个代码块和行156是我设置cookie的行) – blex 2013-03-15 01:57:44