user874737
user874737

Reputation: 533

Can't set PHP cookie on the same page

I'm having trouble setting cookies on the same page. I used cookies on my site and it works fine, I tend to set make the php in separate file. Now, I'm setting a cookie on the same page but it doesn't seem to work.

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

then check if it is set

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

It always says is not set. I tried doing this in page load but still doesn't work.

Upvotes: 3

Views: 6753

Answers (2)

Jason
Jason

Reputation: 4772

I've just encountered this issue in Vanilla Forum. On the first page load, before a session has been established, a session cookie is created, but then every time the application wants to access the session variables (to add to them) it looks for the current session ID in $_COOKIE, which is not set until the next page load.

My workaround is to set the $_COOKIE element manually when the cookie is created.

// 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;

I've raised this as a fault with Vanilla (https://github.com/vanillaforums/Garden/issues/1568), as this workaround feels like a bit of a hack, but it certainly gets around the problem for now.

PHP5.3 Vanilla Forum Version 2.0.18.4

Upvotes: 5

Pekka
Pekka

Reputation: 449515

See the manual on setcookie() (emphasis mine):

Once the cookies have been set, they can be accessed on the next page load with the $_COOKIE or $HTTP_COOKIE_VARS arrays. Note, superglobals such as $_COOKIE became available in PHP 4.1.0. Cookie values also exist in $_REQUEST

Here is a workaround suggestion. It's imperfect because it can't guarantee the cookie actually gets set, but might do in your case.

Upvotes: 11

Related Questions