V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
FaiChou
V2EX  ›  问与答

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

  •  
  •   FaiChou · 2018-12-24 14:26:07 +08:00 · 1926 次点击
    这是一个创建于 1947 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    网上的答案有:

    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

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

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

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

    postman

    SO 上的提问

    4 条回复    2018-12-24 20:35:49 +08:00
    FaiChou
        1
    FaiChou  
    OP
       2018-12-24 14:30:17 +08:00
    附上 Safari 的 response

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

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

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

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

    没啥好办法么? 那 h5 页面咋办呢? 只能改成 token 验证吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1021 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 20:39 · PVG 04:39 · LAX 13:39 · JFK 16:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.