我无法弄清楚为什么会收到此错误:
警告:无法修改标头 信息 - 已经发送的标题 (输出始于 C:\用户\网关\文件\ XAMPP \ htdocs中\ login.php中:3) 在 C:\用户\门户\文件\ XAMPP \ htdocs中\的login.php 第14行
以下是代码:
if (isset($_POST['submit'])) {
$username = sanitize($_POST['username']);
$password = sanitize($_POST['password']);
if ($username) {
if ($password) {
$query = mysql_query(" SELECT * FROM users WHERE username = '$username' && password = '$password' ");
if (mysql_num_rows($query) == 1) {
$setCookie = setcookie('loggedIn', 1, time()+3600);
echo 'user found';
} else {
$error = 'The username and/or password you entered is incorrect';
}
} else {
$error = 'Please enter a password';
}
} else {
$error = 'Please enter a username';
}
}
我输入的用户名'admin'和密码'123',这个记录存在于users表中的数据库中。当输入正确的用户名/密码组合时,我正在回应的“用户发现”消息有效。
问题是,名为“loggedIn”的cookie没有设置,我得到的不能修改标题错误。
为什么?
答案 0 :(得分:1)
问题不在于上面的代码。给你问题的代码可能在你发布之前。
这意味着您在设置cookie之前显示输出(echo,print_r,print,var_dump等)。这也可能是由标题空白字符引起的。
每个例子:
<?php
setcookie('foo', 'bar'); // errors
或者...
<?php
echo 'foo';
setcookie('foo', 'bar'); // errors
检查login.php
的第3行。根据错误消息,您可能正在那里输出内容。
答案 1 :(得分:0)
显然,在setcookie()函数之前,你的代码中有一个输出。我在这段代码中看不到它,但也许你之前做了一些“回声”,甚至在“之前”有一个空格
答案 2 :(得分:0)
如果在设置Cookie之前导致输出错误,例如来自mysql_query
,则会收到标题警告。常见问题是<?php
开始标记或编码数据之前的空格或文本。一些文本编辑器在文件的开头添加此信息。
答案 3 :(得分:0)
在setcookie部分之前,你可能会有一些空格或其他角色回响。使用输出缓冲来避免问题
答案 4 :(得分:0)
检查您之前是否有空白区域
答案 5 :(得分:0)
来自manual:
setcookie()定义了一个与其他HTTP头一起发送的cookie。与其他标题一样,Cookie 必须在脚本输出之前发送(这是协议限制)
您的脚本可能会在发送一些输出后尝试设置cookie。