过期时快递和redis会话

时间:2017-05-10 16:19:54

标签: node.js session express redis

我使用express和redis来保持会话在我的系统上运行。我在sessionCookie上设置maxAge时遇到一些问题。默认情况下,我读到的是24小时,但是很长时间才能保持这种状态。我想设置为30分钟,然后注销用户,我改变了1分钟,看看它是否有效,但没有任何反应,用户仍然记录。

这是我的会话功能:

module.exports.initSession = function(app, db) {
  app.use(session({
    saveUninitialized: true,
    resave: false,
    secret: config.sessionSecret,
    cookie: {
      maxAge: 30*10000,
      httpOnly: true,
      secure: Boolean(process.env.ssl) || true
    },
    key: config.sessionKey,
    store: new RedisStore({
      host: config.redis.host || 'localhost',
      port: config.redis.port || 6379,
      db: config.redis.database || 0,
      pass: config.redis.password || ''
    })
  }));
};

我也尝试使用ttl而不是maxAge,但我得到了相同的结果。它可能是什么?

编辑:

我使用SEAN.JS,会话内容的文件是这两个: express.jsdefault环境。

2 个答案:

答案 0 :(得分:4)

这是我对会话的配置,它有效 为测试目的,我将到期时间设置为5秒。

app.use(session({
        store: new redisStore({
        host: 'localhost',
        port: 6379,
        client: redisClient,
        ttl: 5 // in seconds
    }),
    secret: 'this is secret',
    resave: false,
    saveUninitialized: true,
    // cookie: {maxAge: 5000}
}));

我设置maxAge但它不起作用,当我设置ttl时它起作用了。

注意:我测试过并发现ttl位于秒,但maxAge以毫秒为单位! (有点奇怪)

您可以使用下面的中间件记录会话数据,以查看是否存在护照对象,如果sesssion数据中没有护照对象,则用户已注销。

app.use((req, res, next) => {
    console.log('session:\n', req.session);
    next();
});

答案 1 :(得分:-1)

cookie: {maxAge: 5000} 将在 5 秒后过期客户端的 cookie,而不是存储在 REDIS 中的会话。 如果您想使 RedisStore 中的会话过期,请使用 Ali Sherafat 中提到的 ttl 选项。