首页 > 解决方案 > Firefox 中未返回 Cookie 值

问题描述

这在所有浏览器中的本地开发版本上都可以正常工作...

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

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

10000
20000
30000

问题是它在生产时不会在 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 错误。

标签: phpcookiesproduction

解决方案


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

带有必须的 CookieSameSite=None现在还指定Secure属性(它们需要安全上下文/HTTPS)。

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

您要么需要设置Secure=true,然后通过 HTTPS 访问您的系统,要么设置SameSite=None。(所以要么LaxStrict相反。)


推荐阅读