【问题标题】:Cookie values not being returned in FirefoxFirefox 中未返回 Cookie 值
【发布时间】:2021-10-09 04:02:49
【问题描述】:

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

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 错误。

【问题讨论】:

    标签: php cookies production


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。你说的一切都是有道理的,但它仍然没有返回任何东西(它也停止在 Chrome 中工作)。我的 cookie 现在是:HttpOnly:false Secure:True SameSite:Strict ...而且我仍在 HTTPS 上运行。控制台没有抱怨任何事情。
    • 您是否尝试过在私人标签中,分别。是否禁用了 Firefox 的跟踪器阻止模式?
    • 是的,没有区别。
    • 您在网络面板中检查请求时是否看到任何 Cookie 标头?
    • 是的,我可以看到 cookie 标头。
    【解决方案2】:

    在根据@CBroe 的优秀建议修复了 cookie 后,这个循环仍然不起作用:

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

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

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

    完成后,一切正常。

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

    【讨论】:

      猜你喜欢
      • 2022-11-03
      • 2022-01-08
      • 1970-01-01
      • 2017-03-12
      • 2012-08-25
      • 1970-01-01
      • 2013-02-01
      • 2018-11-10
      • 1970-01-01
      相关资源
      最近更新 更多