我使用以下代码设置了最大会话时间(使用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.')
});
);
答案 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();
});