首页 > 解决方案 > web socket 无法在 Safari 中使用 nodejs 读取 http 生成的 cookie

问题描述

我有以下代码在 http 中生成 cookie,后来我希望 cookie 能够被 websocket ( ws )读取

问题是当我通过localhost打开页面时,cookie 能够由 http nodejs 控制器生成,并且 ws 能够访问 cookie。

但是,当我通过 192.168.0.3 等IP 地址打开 http 时,我可以看到 cookie 是由 http 生成的,但 ws 无法读取它。我检查了 ws 的请求标头,但不包括 cookie。上述方案在 Chrome 浏览器上运行良好,但在 Safari 13.0.3 上无法运行

以下是我生成 http cookie 的代码(我使用koa2

ctx.cookies.set('token', token, {
    httpOnly: false,
    expires: expiryDate,
})

以下是我在nodejs中读取cookie的方式

let cookies = new Cookies(req, null);
console.log(JSON.stringify(req.headers)); //The header does not contain cookie in Safari 13.0.3 with IP address but in Chrome I can see the header has cookie
let token = cookies.get('token');
console.log('Cookie token is: ' + token);  //token value is undefined

请帮忙。

标签: node.jshttpcookies

解决方案


好的,原因是当我从 html 页面的 javascript 调用 ws 时,我将 ws 服务器的地址分配为 localhost,这就是为什么当 ws 服务器收到请求时它无法读取由 http 设置的 cookie,这是一个 IP 地址


推荐阅读