express设置cookie没有被添加到浏览器
发布于 6 年前 作者 Yankai17148 12250 次浏览 来自 问答

新手一枚,今天用express设置登录状态的时候用了res.cookie,在chrome的devtool中也看得到header里有set-cookie,但是就是没有被添加到浏览器里,用req.cookies获取到的是 undefined,下面是代码

res.cookie('isLogin', 1, { expires: new Date(Date.now() + 10000 * 60 * 60 * 24 * 7) });
res.send({success: true, msg: '登录成功'});
10 回复

看了下文档,会不会是类型的问题:

untitled1.png

@maqic

res.cookie('isLogin', '1', { expires: new Date(Date.now() + 10000 * 60 * 60 * 24 * 7) });

这样写的话和之前是一样的,header返回的set-cookie是

set-cookie:isLogin=1; Path=/; Expires=Fri, 04 Nov 2016 05:24:41 GMT
set-cookie:connect.sid=s%3AistHPhEmOtV56vZ0ULn3bIuxPJgIMIKa.Ki88V9WIo%2FzBaxgAiYsY56wTMdGw01ZjT1UArUyt5P0; Path=/; Expires=Fri, 02 Sep 2016 05:24:41 GMT; HttpOnly

@Yankai17148 引入cookie-parser了吗?

@zp1112 引入了 而且确实也能找到返回的cookie QQ图片20160826144613.png 但是就是存不到浏览器里,是和我用的localhost有关系吗?

@Yankai17148 cookie-parser加在路由之前了吗?

var express = require(‘express’); var cookieParser = require(‘cookie-parser’);

var app = express(); app.use(cookieParser());

app.get(’/’, function (req, res) { // 如果请求中的 cookie 存在 isVisit, 则输出 cookie // 否则,设置 cookie 字段 isVisit, 并设置过期时间为1分钟 if (req.cookies.isVisit) { console.log(req.cookies); res.send(“再次欢迎访问”); } else { res.cookie(‘isVisit’, 1, {maxAge: 60 * 1000}); res.send(“欢迎第一次访问”); } }); app.listen(80);

这是最简单的了,你可以再检查看看哪里细节错了

屏幕快照 2016-08-26 下午5.52.00.png

可以看一下是不是因为没有设置默认的domain

请求应该没有跨域吧。没跨域的话,默认应该是能看到 domain 的

还有 connect.sid 应该是 session 级的吧。

@Yankai17148 设置cookie的value类型错了,官方文档上面有写,name:string,value:Object 或者String, 你上面是Number类型,所以有问题。

@Yankai17148 如果你用的cors做的跨域的话,我的解决方法是 在服务器端,配置cors的时候如下 app.use(cors({credentials: true, origin: true})) 在客户端发送请求的时候加入 credentials: ‘include’

希望能帮到你

回到顶部