我正在尝试设置一个基本的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。这是另一个功能。感觉有点便宜,但它确实有效!
答案 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标头返回。
以下是发生的事情:
setcookie()
来电。$_COOKIE
超全局,现在您可以使用您的脚本访问它。答案 4 :(得分:1)
询问是否设置了cookie:
if(isset($_COOKIE["TestCookie"])) $recolor = $_COOKIE["TestCookie"];
else $recolor = $color;