我有一个简单的PHP页面,可以为3个URL设置cookie。问题是,即使我从未发送过任何标题信息,我仍然会收到标题错误。如何在不收到这些错误的情况下编写下面的PHP?
完整的PHP代码:
<?php
if ($_GET["validate"] == 1)
{
setcookie("siteaccess", "AccessGranted", time()+(36*1*1), "/", "b********.com", 0); //Access granted
setcookie("siteaccess", "AccessGranted", time()+(36*1*1), "/", "b********.net", 0);
setcookie("siteaccess", "AccessGranted", time()+(36*1*1), "/", "b********.zxq.net", 0);
$page = urldecode($_GET["preturn"]);
echo '<meta http-equiv="Refresh" content="0;' . $page . '">';
}
else
{
echo "Illegal page access";
}
?>
页面加载时出错:
Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php:2) in /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php on line 4
Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php:2) in /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php on line 5
Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php:2) in /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php on line 6
页面加载时的网址:
http://b*******.com/authenticate.php?preturn=%2Fcaptcha%2Findex.php&validate=1
进一步说明: 此页面为可以访问我的站点的所有3个URL设置cookie。在用户完成简单的反机器人测试后加载此页面,以防止机器人发送下载计数器。设置cookie后,此页面会将您重定向回到首先发送给您的页面,并且由于Cookie应该在此之后就位,用户将不再看到身份验证验证码。
如果我需要提供更多信息,请与我们联系。 我只需要让这些错误消失,这样我就可以正确设置cookie。
答案 0 :(得分:3)
这是一个大多数人都不会想到的小问题。但是,PHP代码之前的单个空行将导致数据被发送。只需消除空白行。我希望这有助于某人!
答案 1 :(得分:0)
在setcookie()
&#39; documentation:
与其他标题一样,Cookie必须在您的任何输出之前发送 脚本(这是一个协议限制)。这要求你放置 在任何输出之前调用此函数,包括和 标签以及任何空格。
问题不在于所示的代码段中。在setcookie()
函数之前至少有一个空格。