首页 > 解决方案 > 几秒钟后,快速会话变得未定义

问题描述

我在 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 参数不会修改行为。你知道会发生什么吗?

谢谢!

标签: javascriptnode.jsexpressexpress-session

解决方案


好的,我已经看到会发生什么。express-session 不支持集群节点服务器(我不知道),我的服务器是集群的。所以我创建了一个会话,在线程 1 中为实例登录,但是如果另一个请求转到线程 2,这里的会话是未定义的。我已将其更改为使用 connect-mongo 并将会话存储在 mongodb 中。谢谢。


推荐阅读