PHP读取使用setcookie()创建的cookie

时间:2010-11-10 19:13:52

标签: php cookies

来自manual

  

在下次加载一个cookie应该可见

的页面之前,Cookie才会显示

意味着在下一页加载之前,setcookie无法访问使用$_COOKIE创建的Cookie。有没有解决这个问题?有没有办法检测在PHP 中使用setcookie创建的cookie而无需重新加载?

我无法修改当前代码库中setcookie调用附近的代码。所以这样的解决方案不起作用:

setcookie('test', 'my test value');
$_COOKIE['test'] = 'my test value';

4 个答案:

答案 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;