【发布时间】:2017-07-31 07:21:39
【问题描述】:
我正在使用 Express.js 服务器。使用cookie-parser 我已经打开了这个端点
app.get("/s", (req,res) => {
res.cookie("bsaSession", req.session.id)
res.send("set cookie ok")
})
当我手动使用浏览器到http://localhost:5555/s 运行网站时,浏览器调试控制台显示cookie 已被应用。
但是当我使用fetch API 做等效时,它并没有设置cookie。
async trySetCookie()
{
await fetch("http://localhost:5555/s",{
method: 'GET',
credentials: 'same-origin'
})
}
为什么?
【问题讨论】:
-
"它没有设置 cookie" --- 你怎么知道的?浏览器是否在请求标头中发送了 cookie?
-
我查看了 Safari 调试控制台 > 存储 > Cookies。当我单击调用
trySetCookie()的按钮时,列表不会改变。但是当我直接进入该页面时,列表会立即添加新的 cookie。 -
那么,您在响应标头中看到
Set-Cookie了吗?该脚本是否在同一个端口上运行? -
这可能只是 Safari 调试控制台在 Ajax 调用完成后没有立即更新其显示的情况。我建议你用代码测试 cookie 的存在。获取完成后,只需执行
console.log(document.cookie)。 -
我又找到了一条线索,在这两种情况下
Set-Cookie肯定会显示要设置的cookie,但在fetch情况下,它总是在cookie 字符串后面有HttpOnly。这可能是阻止浏览器设置 cookie 的原因?我尝试在服务器端添加{httpOnly : false}选项,但fetch仍然有HttpOnly无论如何。
标签: javascript node.js express cookies session-cookies