我创建了这个简单的脚本,它将设置一个具有三个值的 cookie,或者检索已设置的 cookie 值。在我运行 PHP4 的服务器上,一切正常。在我的 PHP 5 (5.2.11) 服务器上,脚本无法在浏览器中设置 cookie。我已经检查了我的 php.ini 中是否启用了输出缓冲,它是。有没有人知道为什么这不起作用?
<?php
echo "<!DOCTYPE html>";
echo "<body>";
if (!isset($_COOKIE['taeinv'])) {
echo "No cookie set... Attempting to set a new cookie.";
$user = "testuser";
$role = "admin";
$expire = "true";
$halfHour = 1800;
setcookie("websitename[Expire]", $expire, time()+$halfHour);
setcookie("websitename[User]", $user, time()+$halfHour);
setcookie("websitename[Role]", $role, time()+$halfHour);
}
if (isset($_COOKIE['websitename'])) {
echo "Cookie Values:";
echo "<br />";
foreach ($_COOKIE['websitename'] as $name => $value) {
echo "<b>$name</b> : $value <br />\n";
}
}
echo "<br />";
echo "<a href=logout.php>Logout</a>";
echo "</body>";
echo "</html>";
?>
最佳答案
您必须在向浏览器输出任何内容之前设置 cookie。尝试将所有 echo
行移动到 setcookie
调用下方的某处。你可以这样做:
<?php
$set = false;
if (!isset($_COOKIE['taeinv'])) {
$set = true;
$user = "testuser";
$role = "admin";
$expire = "true";
$halfHour = 1800;
setcookie("websitename[Expire]", $expire, time()+$halfHour);
setcookie("websitename[User]", $user, time()+$halfHour);
setcookie("websitename[Role]", $role, time()+$halfHour);
}
echo "<!DOCTYPE html>";
echo "<body>";
if ($set) {
echo "No cookie set... Attempted to set a new cookie.";
}
if (isset($_COOKIE['websitename'])) {
echo "Cookie Values:";
echo "<br />";
foreach ($_COOKIE['websitename'] as $name => $value) {
echo "<b>$name</b> : $value <br />\n";
}
}
echo "<br />";
echo "<a href=logout.php>Logout</a>";
echo "</body>";
echo "</html>";
?>
关于php setcookie 在 php5 下失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224278/