【问题标题】:How do I set a session expiration date in redis node.js without maxAge?如何在没有 maxAge 的 redis node.js 中设置会话到期日期?
【发布时间】:2021-05-05 23:04:56
【问题描述】:

我有这个代码:

const redisClient = redis.createClient({
   host: 'localhost',
   port: 6379,
   ttl: 10
});

app.use(session({
  store: new RedisStore({ client: redisClient });,
  secret: 'some secret',
  resave: false,
  saveUninitialized: false,
  cookie: {
    httpOnly: true,
    sameSite: true,
    maxAge: 60*1000
  }
}));

一切正常。 maxAge过期后,redis也会被清空。但是如果你删除maxAge,留下ttl,那么redis永远不会被清除,如何在不指定maxAge的情况下清除redis,因为用户可以将cookie的值maxAge改为null,然后redis 永远不会被清除。我可以以某种方式直接在redis中而不是在cookie中指定到期时间吗?还是我做错了什么?提前谢谢你。

【问题讨论】:

    标签: node.js session redis


    【解决方案1】:

    正如您在connect-redis docs under the ttl option 中看到的那样 - “如果会话 cookie 有过期日期,connect-redis 将使用它作为 TTL。”。

    所以在你的情况下 - redis 中的 cookie 和密钥都将在到期时被清除。

    即使客户端会以某种方式更改 cookie 过期时间,它也不会影响 redis(因此 cookie 可能通过 HTTP 请求发送,但服务器不会识别它)。

    (你没有提到你正在使用哪些模块,我只是假设它的express-sessionconnect-redis

    【讨论】:

    • 是的,没错,我使用express-sessionconnect-redis。您的回答对我有帮助,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2012-03-31
    • 2014-01-21
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多