3

我创建了这个简单的脚本,它要么设置一个包含三个值的 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>";
?>
4

4 回答 4

2

您必须在向浏览器输出任何内容之前设置 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>";
?>
于 2010-02-08T19:34:52.607 回答
0

我遇到了类似的问题,但只有在 Chrome 中 cookie 才消失。火狐很好。

设置setcookie函数中的所有参数修复它。

这会设置 cookie,但 Chrome 会在单击后删除 cookie:

setcookie('uname', 'Joe', time()+3600*24);

这会设置 cookie 并且浏览器会保留它:

setcookie('uname', 'Joe', time()+3600*24, '/', 'www.domain.com', false, false);
于 2013-07-21T14:35:15.983 回答
0

这适用于我的旧 PHP4 服务器,但不适用于 PHP5。

于 2010-02-08T19:42:05.760 回答
0

使用输出缓冲-ob_start()ob_end_flush().

例子:

<?php
    ob_start();
    echo '<p>Initializing…<code></p>';
    setcookie('myLanguage', 'PHP');
    ob_end_flush();
    // 你可以在这里继续你的 PHP 代码...
?>

于 2011-01-28T18:24:30.517 回答