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

use*_*737 3 php cookies

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

$expire = time()+5;
setcookie("rb_vote", 1, $expire);
Run Code Online (Sandbox Code Playgroud)

然后检查它是否已设置

if(isset($_COOKIE["rb_vote"]))  {
echo "IS SET";}
else {
echo "IS NOT SET"; }
Run Code Online (Sandbox Code Playgroud)

它总是说没有设定.我尝试在页面加载中执行此操作但仍然无法正常工作.

Pek*_*ica 10

请参阅setcookie()手册(强调我的):

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

是一个解决方案的建议.它不完美,因为它无法保证cookie实际上已设置,但可能在您的情况下.


Jas*_*son 5

我刚刚在 Vanilla 论坛遇到了这个问题。在第一个页面加载时,在建立会话之前,会创建一个会话 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;
Run Code Online (Sandbox Code Playgroud)

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

PHP5.3 普通论坛版本 2.0.18.4