来自manual:
在下次加载一个cookie应该可见
的页面之前,Cookie才会显示
意味着在下一页加载之前,setcookie
无法访问使用$_COOKIE
创建的Cookie。有没有解决这个问题?有没有办法检测在PHP 中使用setcookie
创建的cookie而无需重新加载?
我无法修改当前代码库中setcookie
调用附近的代码。所以这样的解决方案不起作用:
setcookie('test', 'my test value');
$_COOKIE['test'] = 'my test value';
答案 0 :(得分:7)
_COOKIES超全局是作为脚本初始化的一部分创建的,然后由PHP单独保留。因此,您稍后在脚本中创建的任何cookie都不会神奇地出现在数组中,因为它们在初始化时不存在。
您可以使用runkit_function_redefine()
覆盖内置的setcookie功能,但如果您不是非常小心,您可以打开自己的世界。
答案 1 :(得分:6)
您可以使用会话,它将立即可用,并将限制存储在Cookie中的数据量,因为它只会存储会话ID。您也可以使用复杂的数据。
<?php
$_SESSION['my_var'] = 'something';
$_SESSION['another_var'] = array(1, 2, 3);
$my_var = $_SESSION['my_var'];
echo $my_var;
?>
答案 2 :(得分:2)
或者,如果没有设置cookie以强制发送cookie,您可以制作登录页面并重定向。
答案 3 :(得分:1)
刷新cookie内容而不重新加载所有页面的技巧是执行Ajax请求,因为它的回复HTTP标头将更新cookie。例如:
<强> PHP / HTML 强>
<?php setcookie('test', 'my test value', 0, '/'); ?>
<a href="#" id="see-cookie">See the cookie content updated</a>
使用JQuery的Ajax请求
$("#see-cookie").click( function() {
$.ajax({
url: "/ajax/ajax_test.php",
success: function(html){
alert(html);
}
});
});
收到Ajax请求的PHP
$new_cookie = 'Updated at ' . date('H:i:s') . ' - ' . $_COOKIE['test'];
setcookie('test', $new_cookie, 0, '/');
echo $new_cookie;