【问题标题】:cookie not setting when variable is used for cookie name当变量用于 cookie 名称时,cookie 未设置
【发布时间】:2015-07-25 19:52:55
【问题描述】:

使用代码时在我的服务器上:

<?php
$expire=time()+60*60*24*360;

$cookie_name = 'user';
$cookie_value = "John";
setcookie($cookie_name, $cookie_value, $expire, "/");

$cookie_value = "Jane";
setcookie('userb', $cookie_value, $expire, "/");

print_r($_COOKIE);
?>

第一个 cookie 没有设置,但第二个设置了。由于某种原因,使用变量来识别 cookie 名称似乎会导致它无法设置。 这个问题不会发生在我的本地主机上(一切都按预期工作)。所以我什至不确定从哪里开始。

【问题讨论】:

  • 使用setcookie 创建的Cookie 只会在下一个 请求中显示在$_COOKIE 中。

标签: php cookies


【解决方案1】:

看起来是因为我有一个:

<!DOCTYPE html>

&lt;?php 之前 由于某种原因,它在本地运行良好,但在我的服务器上却不行。有什么建议吗?

【讨论】:

  • 那将不得不破坏 所有 标头永远...会不会是 output_buffering 在您的 php.ini 中打开?
  • 就是这样。我的服务器上的 output_buffering 已关闭。感谢您的建议。
  • 详细说明 Siguza 的正确答案:HTTP 响应由 headerbody 组成。服务器必须完全发送header,然后才能启动发送body。像&lt;!DOCTYPE html&gt; 这样的字符串进入body。如果您开始输出body,PHP 将为您隐式发送header。因此,在您开始将某些内容输出到body 之后,您将无法再操作header - 它已经被发送了。如果您打开了output_buffering,对body 的写入将被缓冲到您可以的某个阈值,但不应操纵header
  • 这很奇怪。我正在使用 w3schools 的教程(w3schools.com/php/showphp.asp?filename=demo_cookie1)。所以该教程不适用于关闭输出缓冲?
【解决方案2】:

改变setcookie函数的参数,然后试试。
例如。

$expire=time()+60*60*24*360;
$cookie_name = 'user';
$cookie_value = "John";
setcookie($cookie_name, $cookie_value, $expire, "/");

$cookie_value1 = "Jane";
setcookie('userb', $cookie_value1, $expire, "/");

print_r($_COOKIE);

【讨论】:

    【解决方案3】:

    您不能使用超过 1 个 setcookie 函数。

    <?php
    $expire=time()+60*60*24*360;
    $cookie_name = 'user';
    $cookie_value = "John";
    setcookie($cookie_name, $cookie_value, $expire, "/");
    //$cookie_value = "Jane";
    //setcookie('userb', $cookie_value, $expire, "/");
    print_r($_COOKIE);
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2014-10-10
      • 2022-01-17
      相关资源
      最近更新 更多