Node.js使用express-session时服务端会话正常但浏览器无cookie问题
可能的原因及对应解决方法
- 你找错了cookie的存储位置或者名称
express-session默认的会话cookie名称是connect.sid,你代码里注释掉了自定义名称name: 'qid',所以不会出现名为qid的cookie。你可以先打开浏览器开发者工具的「网络」面板,找到/products请求的响应头,查看有没有Set-Cookie字段:- 如果存在
Set-Cookie: connect.sid=xxx的内容,说明cookie已经正常下发,你只需要在cookie存储面板选中localhost:4000对应的站点,就能找到这个cookie。 - httpOnly属性只会阻止前端JS读取cookie,不会影响浏览器存储和显示这个cookie,所以和你注释掉
httpOnly: true的操作无关,该配置默认值就是true。
- 如果存在
- 你是跨域调用接口导致cookie无法下发
如果你的前端页面跑在其他端口(比如常见的3000、5173端口),属于跨域请求,默认不会接收服务端的Set-Cookie头,需要额外配置:- 服务端添加CORS配置,开启credentials支持,且允许的源不能为通配符
*,要写前端的具体地址:
const cors = require('cors') app.use(cors({ origin: 'http://localhost:3000', // 替换成你的前端实际地址 credentials: true }))- 前端请求时携带凭证,axios示例:
fetch示例:axios.get('http://localhost:4000/products', { withCredentials: true })fetch('http://localhost:4000/products', { credentials: 'include' }) - 服务端添加CORS配置,开启credentials支持,且允许的源不能为通配符
- 浏览器隐私设置阻止了cookie写入
如果你用的是隐私模式、或者开启了第三方cookie拦截,也可能出现cookie下发成功但不存储的情况,可以换普通模式或者其他浏览器测试验证。
内容的提问来源于stack exchange,提问作者Kai021195
相关产品推荐
相关产品推荐

