麻烦各位帮我看看我在使用 express session 时遇到的问题。
最近在学 nodejs,在实现 评论验证码时遇到了一个问题。
var identityKey = 'captcha';
app.use(session({
// name: identityKey,
secret: 'xiao-gan-de-session-ce-shi', // 用来对session id相关的cookie进行签名
store: new MongoStore({ mongooseConnection: mongoose.connection }), // 本地存储session(文本文件,也可以选择其他store,比如redis的)
saveUninitialized: false, // 是否自动保存未初始化的会话,建议false
resave: false, // 是否每次请求都重新生成session
// unset:null,
cookie: {
maxAge: 10 * 3000, // 有效期,单位是毫秒
}
}));
app.use(function timeLog(req, res, next) {
// console.log('Time: ', Date.now())
// req.session.captcha = captcha.text;
next()
})
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(bodyParser.raw());
// app.use('/api/captcha', captcha)
app.use('/api/comment', comment);
app.use('/api/base', base);
app.post('/a',function(req,res,next) {
req.session.a = '666888';
res.json({data:666888})
})
app.post('/b',function(req,res,next) {
req.session.b = '111222';
console.log(req.session,'b点打印session'); // 此处打印结果中 没有 /a 中的 666888
res.json({data:111222})
})
app.post('/c',function(req,res,next) {
req.session.c = '333444';
console.log(req.session,'c点打印session'); // 此处打印结果中 没有 /b 中的 111222
res.json({data:333444})
})
问题:
- 问题:初始化时 mongodb 内可以看到 4 个 session 数据,我期望的是 1 条公用的 session 数据,是不是我理解有问题。
- 当我在 /a /b /c 的接口中像这样req.session.a = 666888 赋值 时,由于/a /b /c 中不是一个 session,只能打印出对应路由所看到的赋值,不能看到其他两个路由中session赋的值 。
请问我该怎么解决呢?
3 回复
你试试把cookie过期值改长一点,可能是你两次访问的时间间隔太长了,数据过期了,
而且现在的session不需要cookieparser作为依赖了,可以去掉,否则可能会导致一些问题,你也可以试试
是cookie和session两个中间件的顺序问题吧,改一下顺序试试呢