Node.js在会话到期时运行功能Express&护照

时间:2014-04-08 01:14:17

标签: javascript node.js session express passport.js

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

  app.use(express.session({
    cookie: {
      maxAge : 3600000
    }
  }));

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

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

1 个答案:

答案 0 :(得分:1)

您正在做的是设置Cookie"到期"参数。浏览器会在Cookie过期后将其清除,但您不会知道它 - 它不会随着未来的请求一起到达。

欺骗你可以使用acutaly知道cookie是否已过期是将时间戳写入cookie并将其生命周期("到期"值)设置为某个遥远的时间(例如,2037年)。 这样,您可以手动检查是否仍要将给定的cookie视为有效,或者是否要续订。

可悲的是,您必须按照

的方式编写自己的代码
app.use(function(req, res, next) {
    //Checking previously set cookie (if there is one)
    var session = JSON.parse(req.cookies['session'] || '');
    if (session && new Date(session.expires) < new Date()) {
        console.log('User session has expired.')
    }

    //Resetting the cookie
    res.cookie('session', JSON.stringify({ session: <sessionIDKeyHere>, expires: Date.now() + 3600000 }), {
        expires: new Date(2037, 0, 1),
        httpOnly: true,
        secure: true //Do you have https? If no, set to false
    });

    next();
});