Firefox 不返回 Cookie 值

Cookie values not being returned in Firefox

这在我的所有浏览器的本地开发版本上都运行良好...

foreach ($_COOKIE as $key=>$val) {
    echo $val . '<br />';       
}

...并将 return 页面上所有当前的 cookie 值,如下所示:

10000
20000
30000

问题是它在生产环境中 return Firefox 或 Edge 中没有任何内容。不过它在 Chrome 生产环境中确实有效。

以下是 Chrome 开发工具如何在我的本地版本上查看 cookie:

Name                Value   Domain          Path    Expires / Max-Age           Size    Priority
------------------------------------------------------------------------------------------------
wish_product_10425  10000   testing.local   /       2021-08-08T04:48:37.000Z    23      Medium  
wish_product_10499  20000   testing.local   /       2021-08-09T01:54:38.000Z    23      Medium  
wish_product_10644  30000   testing.local   /       2021-08-09T01:54:39.000Z    23      Medium  

...以下是 Firefox 开发工具如何在我的本地版本上查看 cookie:

Name                Value   Domain          Path    Expires / Max-Age           Size    HttpOnly    Secure  Priority    SameSite
--------------------------------------------------------------------------------------------------------------------------------
wish_product_10425  10000   testing.local   /       2021-08-08T04:48:37.000Z    23      false       false       Medium  None
wish_product_10499  20000   testing.local   /       2021-08-09T01:54:38.000Z    23      false       false       Medium  None
wish_product_10644  30000   testing.local   /       2021-08-09T01:54:39.000Z    23      false       false       Medium  None

总而言之,它适用于所有浏览器中的本地开发版本,但在生产环境中它仅适用于 Chrome。

仅供参考,在生产中 cookie 域是正确的生产域。也没有 PHP 个错误。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite:

Cookies with SameSite=None must now also specify the Secure attribute (they require a secure context/HTTPS).

您的 cookie 设置为 SameSite=None,但也设置为 Secure=false,这意味着 Firefox 将阻止它们,即不会将它们与后续请求一起发回。

您需要设置 Secure=true,然后通过 HTTPS 访问您的系统 - 或者 设置 SameSite=None。 (所以 LaxStrict 代替。)

根据@CBroe 的优秀建议修复 cookie 后,此循环仍然无效:

foreach ($_COOKIE as $key=>$val) {
   echo $val . '<br />';       
}

...直到我在一个完全不同的网络主机上尝试它,在那里它运行良好(我的其他 cookie 相关脚本也是如此)。

问题原来是我们的主机 WPEngine,根据我的支持对话,他们说解决这个问题的唯一方法是他们从他们的网站中排除所需的 cookie 名称(或部分 cookie 名称)缓存。

完成后,一切正常。

更多信息:https://wpengine.com/support/cookies-and-php-sessions/