Node.js在会话到期Express&Passport上运行功能

Pau*_*aul 5 javascript session node.js express passport.js

我使用以下代码(使用Express.js和Passport.js)设置了最大会话时间.

  app.use(express.session({
    cookie: {
      maxAge : 3600000
    }
  }));
Run Code Online (Sandbox Code Playgroud)

如果会话到期(我的日志文件和分析),我想运行一个函数.有点像这样:

app.use(express.session.onExpiry(function(user){
        console.log('User session for ' + user + ' has expired.')
    });
);
Run Code Online (Sandbox Code Playgroud)

Ars*_*gly 1

您正在做的是设置 cookie“过期”参数。浏览器将在 cookie 过期后将其清除,并且您不会知道它 \xe2\x80\x94 它根本不会与未来的请求之一一起到达。

\n\n

要准确知道 cookie 是否过期,可以使用的技巧是在 cookie 中写入时间戳,并将其生命周期(“过期”值)设置为某个遥远的时间(例如 2037 年)。\n通过这种方式,您可以手动检查是否仍然存在想要将给定的 cookie 视为有效或者想要更新它。

\n\n

可悲的是,您必须按照以下方式编写自己的代码

\n\n
app.use(function(req, res, next) {\n    //Checking previously set cookie (if there is one)\n    var session = JSON.parse(req.cookies[\'session\'] || \'\');\n    if (session && new Date(session.expires) < new Date()) {\n        console.log(\'User session has expired.\')\n    }\n\n    //Resetting the cookie\n    res.cookie(\'session\', JSON.stringify({ session: <sessionIDKeyHere>, expires: Date.now() + 3600000 }), {\n        expires: new Date(2037, 0, 1),\n        httpOnly: true,\n        secure: true //Do you have https? If no, set to false\n    });\n\n    next();\n});\n
Run Code Online (Sandbox Code Playgroud)\n