node.js - Express 和 Redis session 的过期时间

标签 node.js session express redis

我正在使用express和redis来使 session 在我的系统上保持事件状态。我在设置 sessionCookie 上的 maxAge 时遇到一些问题。默认情况下,我读到的时间是 24 小时,但这对于保持其存活来说是很长的时间。我想设置大约 30 分钟,然后注销用户,我更改了 1 分钟以查看它是否有效,但没有任何反应,用户仍然登录。

这是我的 session 函数:

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 session 内容的文件是这两个: express.jsdefault环境。

最佳答案

这是我的 session 配置,它有效。
出于测试目的,我将过期时间设置为 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以毫秒为单位! (有点奇怪)

您可以使用如下中间件记录 session 数据,以查看护照对象是否存在,如果 session 数据中不存在护照对象,则用户将被注销。

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

关于node.js - Express 和 Redis session 的过期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43897941/

相关文章:

node.js - 调试在 Intellij 中不起作用 - NodeJS + NestJS App

node.js - API Gateway 排序查询字符串

javascript - nodejs 将时间戳字符串转换为具有自定义时区的日期和 UTC

java - session 同步的目的是什么

c# - MVC ASP.Net 上的 session 锁定 - 防止用户同时访问同一资源

javascript - node.js 和 express 中的事件菜单项

node.js - 使用 gulp 选择和移动目录及其文件

php - 我怎样才能让 SoapClient 尊重 session ?

node.js - Expressjs POST 错误 : TypeError: Cannot read property 'title' of undefined

javascript - 使用 Express 设置 React 应用程序