Node.js在会话过期Express&Passport上运行function

我有一个最大的会话时间设置使用下面的代码(与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.') }); ); 

你在做什么是设置一个cookie“expires”参数。 浏览器一旦过期就会清除cookie,并且您不会知道这些信息 – 它不会随着未来的请求一起到达。

窍门你可以使用acutaly知道如果cookie过期是写入一个cookie的时间戳,并设置其一生(“expires”值)到一些遥远的时间(比如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(); });