I have used the standard PHP code to update the value of an existing cookie:
$cookie_name = 'user';
$cookie_value = 'Alex Porter';
setcookie($cookie_name,
$cookie_value,
time() + (86400 * 30), # 86400 = 24h x 60m x 60s
'/');
However, when I try to display the new value in the same script, the old value appears.
Here's the PHP:
if (isset($_COOKIE[$cookie_name]))
{
echo 'Cookie ' . $cookie_name . ' is set!<br>';
echo 'Value is: ' . $_COOKIE[$cookie_name];
}
else
{
echo 'Cookie named ' . $cookie_name . ' is not set!';
}
According to this SO query, a manual page refresh is necessary before the new value is displayed (Check Robert Rossman's answer):
Cookies set during a request will be available via $_COOKIE on the next page load/next request. They are not available in the current request.
You will probably have to store the value in some other variable if you need to access it in the current request.
I'd like to ask:
- Why is the new value not available in the current request?
- Is it a caching issue?
- If it is cache related, is there a way to solve this?
- Is there any other way to get the new value without a manual page reload?
In fact, if you go to Firefox's Developer Tools - Storage section, the new value is correctly displayed though the PHP script displays the old value (without a manual page refresh.)
My Answer:
The reason why the new value is not available in the current request is because the `$_COOKIE` superglobal is populated at the beginning of the script execution with the values that were sent by the client in the request headers. When you update a cookie using `setcookie()`, the new value is sent to the client in the response headers, but it is not immediately available in the `$_COOKIE` superglobal during the same script execution.
This is not a caching issue, but rather a limitation of how cookies work in PHP. The browser will send the updated cookie value in subsequent requests, but it won't be available in the `$_COOKIE` superglobal until the next page load or request.
One way to work around this limitation is to store the updated value in a separate variable within the same script, so that you can access it without relying on the `$_COOKIE` superglobal.
Another option is to use JavaScript to update the value on the client side without requiring a page reload. You can use JavaScript to read the updated cookie value from the browser's storage and display it on the page.
Overall, there is no direct way to access the updated cookie value in the same script execution without a manual page reload, due to the way cookies work in PHP.
Rate this post
4 of 5 based on 1781 votesComments