使用Redis存储的快速会话无法创build会话

我将Redis Express 4.13.1用作会话存储。

app.use(session({ store: new RedisStore, secret: '...', resave: false, saveUninitialized: true })); 

它起初工作,但它不起作用(升级后的node.js)。 使用默认存储(内存)工作正常,但使用RedisStore,会话不会被创build。 这是创build会话的代码:

 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: '...'} 

但在此之后,会议没有创build:

 router.get('/admin/main', (req, res, next) => { console.log(req.session); ... }); 

打印会话:

 Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true } } 

我手动使用session.save,但它没有工作。 我错过了什么?

在使用redis时,可能会检查应用程序中的几个点来解决这样的问题。 首先,检查浏览器是否获取cookie,例如通过检查浏览器上的资源 – > cookie。

  • 检查到期date,并在那里看到会话ID。

其次,检查相应密钥的redis,如果密钥存在,则从redis-cli键到期:

  • 所有键: keys *

  • 按键值: get key (sess:PMlu4s1PYHnSZXBMSoJGLgjNSGXq_s-g is a key for me)

  • 检查您的密钥何时过期: ttl key

可能有以下问题之一:

  • 你可能已经不恰当地configuration了redis
  • 您可能已经configuration不当的redis ttl,例如您的ttl值应该在几秒钟内,而cookie maxAge以毫秒为单位。

我build议您不要询问您的server.js代码,而是要按照以下步骤检查是否一切正常,或者至less创build了会话。