php - 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 错误。
解决方案
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite:
带有必须的 Cookie
SameSite=None
现在还指定Secure
属性(它们需要安全上下文/HTTPS)。
您的 cookie 设置为SameSite=None
,但也设置为Secure=false
,这意味着 Firefox 将阻止它们,即不会将它们与后续请求一起发送回去。
您要么需要设置Secure=true
,然后通过 HTTPS 访问您的系统,要么不设置SameSite=None
。(所以要么Lax
或Strict
相反。)
推荐阅读
- python - 使用访问代码 (APS) 打开 URL 的 Python 脚本
- git - 仅在使用 Git Diff 更改的文件上运行 TSLint
- java - Java将两个数组变成一个二维数组
- angular - 在 Angular 的 ag-grid 中获取行 ID
- mysql - 基于条件回滚事务
- ajax - 在实体框架 MVC 中使用 ajax 更新记录
- spring - Spring Boot 属性模型中的 Thymeleaf 代码
- c# - UWP - ListView 问题,我无法将搜索添加到列表中
- javascript - Object.prototype 在 Node 中返回空对象
- r - ggplot - 从没有 for 循环的列表中绘制项目