无法在同一页面上设置PHP cookie

时间:2011-09-17 13:46:42

标签: php cookies

我在同一页面上设置Cookie时遇到问题。我在我的网站上使用了cookie并且工作正常,我倾向于将php设置为单独的文件。现在,我在同一页面上设置了一个cookie,但它似乎不起作用。

$expire = time()+5;
setcookie("rb_vote", 1, $expire);

然后检查它是否已设置

if(isset($_COOKIE["rb_vote"]))  {
echo "IS SET";}
else {
echo "IS NOT SET"; }

总是说未设定。我尝试在页面加载中执行此操作但仍然无效。

2 个答案:

答案 0 :(得分:9)

参见manual on setcookie()(强调我的):

  

设置好Cookie后,可以使用$ _COOKIE或$ HTTP_COOKIE_VARS数组访问下一页加载。注意,$ _COOKIE等超级全局变量在PHP 4.1.0中可用。 Cookie值也存在于$ _REQUEST

Here是一种变通方法的建议。这是不完美的,因为它不能保证cookie实际上已经设置好,但可能在你的情况下。

答案 1 :(得分:2)

我刚在香草论坛遇到过这个问题。在第一页加载时,在建立会话之前,会创建会话cookie,但每次应用程序想要访问会话变量(添加到它们)时,它会在$ _COOKIE中查找当前会话ID,这是直到下一页加载才设置。

我的解决方法是在创建cookie时手动设置$ _COOKIE元素。

// Create a cookie to identify the session.
// This line already exists. $Name is the cookie name.
// $SessionID is a random md5 ID that has just been generated.
setcookie($Name, $SessionID, $Expire, $Path, $Domain);

// Set the cookie for the remainder of the page. This is a workaround.
if (!isset($_COOKIE[$Name])) $_COOKIE[$Name] = $SessionID;

我已将此作为Vanilla(https://github.com/vanillaforums/Garden/issues/1568)的错误提出,因为这种解决方法感觉有点像黑客,但它现在肯定会解决问题。

PHP5.3香草论坛版本2.0.18.4