首页 > 解决方案 > 如何删除不活动的快速会话?

问题描述

我正在使用express-sessionpassport-local验证我的用户,我希望能够获得当前在线用户。登录工作正常,创建会话并存储用户 ID,我可以获得所有当前会话。但是如果用户注销或离开页面怎么办?会话仍然存在,当我获得所有会话时,即使他离开页面并且不再在线,我也会看到该用户。

我的快速会话代码:

app.use(
  session({
    store: new (pgSession(session))(),
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: false,
    cookie: {
      maxAge: 24 * 60 * 60 * 1000
    },
  })
);

所以我的问题是,是否有某种机制可以删除非活动会话,以及我应该做些什么来确保我的商店中只有活动会话?(我会就这个话题发表任何更长的文章或答案)

标签: node.jsexpresspassport.jspassport-local

解决方案


您正在寻找的是req.session.destroy()将从您的数据库中删除会话。您可以将此方法集成到您的/logout路线中。

例子:

router.get('/logout', (req, res, next) => {
  req.logout();
  req.session.destroy((err) => {
    if (err) return next(err);
    return res.redirect('/login');
  });
});

推荐阅读