猿问

为什么php的$_COOKIE不同步读取cookie?

在我的 php 应用程序(没有特定框架)中,我有一个页面,其中包含一个所需文件,其中我根据 url 存储 cookie (使用js cookie) - 如

孩子.php

<?

// some PHP code

?>


<!-- some HTML/JS code -->

<script>

Cookies.set('c', window.location.pathname);


$('.el').on('click', {

window.location = "/parent.php?path=pathname" // this reloads the parent so it can reload the parent and process the previously stored cookie as well as handling other features are displayed based on `path GET parameter`

});

</script>


?>

然后我想在 PHP 代码中显示(使用)新加载的页面(以及 child.php 的父页面)中的 cookie,如下所示


父级.php


 require_once("child.php"); // including the file here is supposed to process the cookie store logic, which indeed (on the frontend side) does

 if($_COOKIE['c'] = 'xyz') { //etc. }

但 $_COOKIE['c'] 打印时为空error_log(就好像新存储的 cookie 不存在一样),而重新加载后 cookie 会正确显示(因此我假设它正确获取 cookie 但该 cookie可以异步使用)

为什么?


更新:单击该元素(并且页面重新加载)后第一次打开页面时浏览器发送的标头(Cookie)

没有cookie&ldquo;c&rdquo;

从链接重新打开页面时

坐标:xyz

如果单击链接两次(其本身会触发location.reload),则同样适用

标题cache-control设置为no-cache

所以我看到发生的是 $_COOKIE['c'] 返回一个空字符串,因为第一次加载时 http cookie 不可用,但如何才能使其可用而不必重新加载两次


长风秋雁
浏览 114回答 1
1回答

翻翻过去那场雪

当第一次提供页面时 - cookie尚未设置。步骤如下:页面完全呈现(cookie 尚未设置)浏览器评估设置cookie的页面,包括JS您刷新页面,现在 cookie 已设置 - 因此浏览器在请求中发送它,服务器端的 php 会看到它。所以问题是步骤 1 比步骤 2 发生得早得多,它与同步性无关。
随时随地看视频慕课网APP
我要回答