簡體   English   中英

具有connect-redis的Node / Express,如何處理會話到期

[英]Node/Express with connect-redis, how handle session expiry

我有一個使用redis作為會話存儲的Node / Express應用程序。

對本屆會議期滿的處理有疑問。

我想要一個活動的會話,直到關閉瀏覽器為止,所以我沒有設置會話到期時間。

這樣做會話cookie可以正常工作,但是我對Redis表示懷疑。

似乎存儲在Redis DB中的鍵/值對永遠不會過期。

如何正確處理呢?

有沒有一種方法可以配置redis銷毀某個空閑時間存儲的值?

還是在應用程序內部調用connect-redis時更好地設置TTL?


應用程序內部會話的實際配置:

var session = require('express-session');
var RedisStore = require('connect-redis')(session);

app.use(session({
  store: new RedisStore({port:6379, host: 'localhost'}),
  secret: "my-secret-here",
  resave: false,
  saveUninitialized: true }));

將Redis與Express-Session一起使用時,可以使用Express-Session中的touch()方法來重置TTL。 因此,如果在創建會話時設置了TTL,請在不希望會話過期的路由上執行以下操作:

api.get("/someRoute/", (req, res) => {
  req.session.touch();

  // Whatever else you need to do
  res.sendStatus(200);
}

這將重置Redis上的TTL,並假設客戶端仍在訪問您的API,從而防止會話過期-我假設,如果客戶端與您的API的交互時間不夠長,則意味着瀏覽器已關閉或完成使用您的應用。

您可以在創建會話存儲時指定一個ttl。 您可以在自述文件中找到更多選項。

app.use(session({
    store: new RedisStore(options),
    secret: 'keyboard cat',
    ttl : 20 // ttl is in seconds. From the readme.
}));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM