PHP cookie有一个刷新延迟

时间:2012-07-13 13:42:00

标签: php cookies

  

可能重复:
  Cookie only displayed on refresh?

我正在尝试设置一个基本的PHP cookie,它将记住使用哪种颜色主题。然而,当我测试它时,在设置和显示颜色主题之间存在一次刷新延迟。

澄清一下:我有一个允许用户选择颜色的选择表格。然后,有一个应用按钮。选择该应用按钮后,页面应自动设置cookie并显示颜色。但是,当按下“应用”按钮时,仅设置cookie并且在用户点击刷新按钮之前不显示主题。关于如何解决这个问题的任何想法?

$help = $_POST["theme"];
    $color = "#" . $help;
    setcookie("TestCookie", $color, time()+60*60*24);
    $recolor = $_COOKIE["TestCookie"];
    echo '<style type="text/css"> body { background: '.$recolor.' } </style>';

其中$ _POST [“theme”]是选择表单名称。非常感谢!这个:Cookie only displayed on refresh?就是我所说的,但是使用PHP而不是C#

编辑:感谢所有回复!我设法通过将背景颜色设置为用户在同时设置cookie时选择的任何内容来解决此问题。因此,当用户最初选择颜色时,不是设置背景的cookie。这是另一个功能。感觉有点便宜,但它确实有效!

5 个答案:

答案 0 :(得分:4)

$ _COOKIE superglobal在您请求该页面时提供了Cookie,这就是您永远不会看到刚刚保存的值的原因

在此处的手册页http://php.net/set_cookie,您可以看到:

  

设置好cookie后,可以在下一页访问它们   使用$ _COOKIE或$ HTTP_COOKIE_VARS数组加载。

答案 1 :(得分:3)

那是因为setcookie没有修改$ _COOKIE变量。您必须使用setcookie并同时在$ _COOKIE

中设置相关值

答案 2 :(得分:2)

我希望这是因为您正在设置cookie,然后检查下一行代码的值 - 您将无法看到它,因为此时客户端将发送请求该页面尚未包含cookie。

您可以尝试使用$_SESSION - 只需将您对$_COOKIE的引用全部交换为$ _SESSION。

如果不这样做,请尝试明确检查表单是否刚刚提交,并根据他们刚刚提交的值设置样式。

答案 3 :(得分:2)

添加到 ShogunArts.de 的闷热, 当您setcookie()时,必须首先通过HTTP标头将此“命令”发送到浏览器。当您尝试访问超级全局$_COOKIE时,它也不会包含cookie值,除非浏览器也通过HTTP标头返回。

以下是发生的事情:

  1. 请求的页面(浏览器还没有cookie)
  2. setcookie()来电。
  3. 脚本已完成执行,现在它将回复浏览器,告诉它设置cookie。
  4. 当浏览器有cookie时,再次访问该页面时,它会将其与请求一起发送。
  5. 现在PHP收到了一个带cookie的请求,它设置了$_COOKIE超全局,现在您可以使用您的脚本访问它。

答案 4 :(得分:1)

询问是否设置了cookie:

if(isset($_COOKIE["TestCookie"])) $recolor = $_COOKIE["TestCookie"]; 
else $recolor = $color;