我使用Express 4.13.1和Redis作为会话存储。
app.use(session({
store: new RedisStore,
secret: '...',
resave: false,
saveUninitialized: true
}));
它起初工作,但后来它没有工作(在升级node.js之后)。使用默认存储(内存)工作正常,但使用RedisStore时,不会创建会话。这是创建会话的代码:
router.post('/admin/login', (req, res, next) => {
Auth.compare(..., () => {
req.session.authorized = true;
req.session.userId = id;
console.log(req.session); // It prints well. Session is created
res.redirect('/admin/main');
});
});
那一刻,会议发生了变化:
Session {
cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
authorized: true,
userId: '...'}
但在那之后,会议没有创建:
router.get('/admin/main', (req, res, next) => {
console.log(req.session);
...
});
打印会话:
Session {
cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true }
}
我手动使用了session.save,但它没有用。我错过了什么?
答案 0 :(得分:2)
在使用redis时,可以检查应用中的几个点来解决这样的问题。首先,检查您的浏览器是否获取了cookie,例如通过检查资源 - > Cookie 在浏览器上。
其次,检查redis是否有相应的密钥,如果密钥存在且密钥的到期来自 redis-cli :
所有键:keys *
按键值:get key (sess:PMlu4s1PYHnSZXBMSoJGLgjNSGXq_s-g is a key for me)
检查密钥何时过期:ttl key
可能存在以下问题之一:
我建议您按照以下步骤检查一切是否正常,或者至少创建会话,而不是询问您的server.js代码。