fetch api 在浏览器内无法保存和发送 cookie?

2018-12-24 14:26:07 +08:00
 FaiChou

应该是使用姿势有问题, 特来请教.

网上的答案有:

  1. 需要设置 credentials: 'include' ✅
  2. 跨域需要设置 Access-Control-Allow-Credentials: true ✅
  3. 跨域需要设置 Access-Control-Allow-Origin: http://localhost:3000 ✅

这三个都设置的正常:

fetch(COR_API, {
  credentials: 'include',
  method: 'POST',
  body: ...
  headers: {'Accept': 'application/json'}
})

在 chrome-devtool 中没有 Set-Cookie 字段.

在 Safari 和 Firefox 中会有 Set-Cookie 字段, 但是不会保存 cookie.

使用 postman 测试, 发现是正常的, 第二次请求会带上第一次的 cookies.

SO 上的提问

1932 次点击
所在节点    问与答
4 条回复
FaiChou
2018-12-24 14:30:17 +08:00
附上 Safari 的 response

FaiChou
2018-12-24 15:08:48 +08:00
使用 axios 也是一样的结果..
FaiChou
2018-12-24 16:02:51 +08:00
哈哈哈哈 😂

结果是 server 把 cookie 的过期时间设置错了, 服务器时间和本地时间差 8 小时.. i18n

No one can save my day..
FaiChou
2018-12-24 20:35:49 +08:00
哦.. 不是三楼的答案.. 而是 因为浏览器禁止了第三方 cookie, 需要手动打开. chrome 和 Safari 是这样的.

而且在手机上也是禁止第三方 cookie..

没啥好办法么? 那 h5 页面咋办呢? 只能改成 token 验证吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520459

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX