新手一枚,今天用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: '登录成功'});
看了下文档,会不会是类型的问题:
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 但是就是存不到浏览器里,是和我用的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);
这是最简单的了,你可以再检查看看哪里细节错了
可以看一下是不是因为没有设置默认的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’
希望能帮到你