【发布时间】:2020-04-23 04:50:46
【问题描述】:
我在 nodejs 项目中使用 express-session 1.17.1。 我可以正确存储会话,但几秒钟后,会话变得未定义。
这是服务器代码:
...
self.app.use(session({
secret: conf.SERVER.SECRET_WORD,
resave: false,
saveUninitialized: false,
expires: new Date(Date.now() + 36000000)
}));
server = http.createServer(self.app);
...
这里是登录完成后存储会话的代码:
...
if(!err) {
user.password="";
req.session.user=user._id.toString();
req.session.role=user.role;
res.status(200).send(user);
} else {
errorHandler.processError(err, res, log);
}
...
这里是检查会话是否为空的代码:
...
if(req.session.user==null){
errorHandler.processError(res.__("GENERAL.SESSION_NULL"), res, null, 401);
}else{
// do something.
...
当我启动服务器并发出第一个请求时,一切正常并且会话不为空,它已存储用户。但是几秒钟后,如果我执行相同的请求,会话变得未定义。 增加 expires 参数不会修改行为。 你知道会发生什么吗?
谢谢!
【问题讨论】:
-
问题是express session默认将会话数据存储在内存中。每次服务器重新启动时,会话都消失了。你看过express的
.isAutheticated()函数和passport.js吗? -
这个问题比你所展示的更多。您可能会失去会话的原因有很多。例如,如果会话 cookie 丢失,您将看不到对会话对象的引用。如果在客户端中关闭了 cookie 持久性。如果 API 调用者未能在请求中包含 cookie,则会话将丢失。如果会话存储被刷新。如果会话数据未正确保存。
-
另外,
express-session似乎没有expires选项。推荐的选项是maxAge,指定如下:app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))。
标签: javascript node.js express express-session