使用redis商店的快速会话无法创建会话

时间:2016-06-19 22:34:10

标签: node.js session express redis

我使用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,但它没有用。我错过了什么?

1 个答案:

答案 0 :(得分:2)

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

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

其次,检查redis是否有相应的密钥,如果密钥存在且密钥的到期来自 redis-cli

  • 所有键:keys *

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

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

可能存在以下问题之一:

  • 您可能不恰当地配置了redis
  • 例如,您可能不恰当地配置了redis ttl 你的ttl值应该是几秒钟,而cookie maxAge是在 毫秒。

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