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
。 (所以 Lax
或 Strict
代替。)
根据@CBroe 的优秀建议修复 cookie 后,此循环仍然无效:
foreach ($_COOKIE as $key=>$val) {
echo $val . '<br />';
}
...直到我在一个完全不同的网络主机上尝试它,在那里它运行良好(我的其他 cookie 相关脚本也是如此)。
问题原来是我们的主机 WPEngine,根据我的支持对话,他们说解决这个问题的唯一方法是他们从他们的网站中排除所需的 cookie 名称(或部分 cookie 名称)缓存。
完成后,一切正常。
这在我的所有浏览器的本地开发版本上都运行良好...
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 theSecure
attribute (they require a secure context/HTTPS).
您的 cookie 设置为 SameSite=None
,但也设置为 Secure=false
,这意味着 Firefox 将阻止它们,即不会将它们与后续请求一起发回。
您需要设置 Secure=true
,然后通过 HTTPS 访问您的系统 - 或者 不 设置 SameSite=None
。 (所以 Lax
或 Strict
代替。)
根据@CBroe 的优秀建议修复 cookie 后,此循环仍然无效:
foreach ($_COOKIE as $key=>$val) {
echo $val . '<br />';
}
...直到我在一个完全不同的网络主机上尝试它,在那里它运行良好(我的其他 cookie 相关脚本也是如此)。
问题原来是我们的主机 WPEngine,根据我的支持对话,他们说解决这个问题的唯一方法是他们从他们的网站中排除所需的 cookie 名称(或部分 cookie 名称)缓存。
完成后,一切正常。