如何收听会话销毁事件?
How can I listen to session destroyed event?
我目前正在使用 Sails.JS 开发应用程序。
我想统计在线用户数并在他们登录/注销或会话过期时更新它,但我不知道如何实现会话销毁事件,无法更新在线人数用户只要会话过期而用户未注销。
如上所述,默认会话实现中没有此类事件,Sails 会话接近 ExpressJs 会话,我建议您阅读这篇关于 ExpressJs 会话的文章:
http://expressjs-book.com/forums/topic/express-js-sessions-a-detailed-tutorial/
那么为了实现你想要的,一个想法是使用 store
并在其中查询。
您是否考虑过其他解决方案,例如使用 socket.io
(内置 sails)并在登录时将您的用户添加到频道中,然后简单地计算频道内的用户数?
您可以像这样包装 session.destroy() 函数:
var destroyWrapper = buildDestroyWrapper(function(req){
//do stuff after req.destroy was called
});
function buildDestroyWrapper(afterDestroy){
return function(req){
req.destroy();
afterDestroy(req);
};
}
//later, in your controller
function controllerAction(req,res,next){
destroyWrapper(req);
}
此方法允许您以不同方式处理销毁,具体取决于您传递给 buildDestroyWrapper 的回调。例如:
var logAfterDestroy = buildDestroyWrapper(function(req){
console.log("session destroyed");
});
var killAfterDestroy = buildDestroyWrapper(function(req){
process.kill();
});
function buildDestroyWrapper(afterDestroy){
return function(req){
req.destroy();
afterDestroy(req);
};
}
//later, in your controller
function logoutAction(req,res,next){
logAfterDestroy(req);
}
function killAppAction(req,res,next){
killAfterDestroy(req);
}
我目前正在使用 Sails.JS 开发应用程序。
我想统计在线用户数并在他们登录/注销或会话过期时更新它,但我不知道如何实现会话销毁事件,无法更新在线人数用户只要会话过期而用户未注销。
如上所述,默认会话实现中没有此类事件,Sails 会话接近 ExpressJs 会话,我建议您阅读这篇关于 ExpressJs 会话的文章:
http://expressjs-book.com/forums/topic/express-js-sessions-a-detailed-tutorial/
那么为了实现你想要的,一个想法是使用 store
并在其中查询。
您是否考虑过其他解决方案,例如使用 socket.io
(内置 sails)并在登录时将您的用户添加到频道中,然后简单地计算频道内的用户数?
您可以像这样包装 session.destroy() 函数:
var destroyWrapper = buildDestroyWrapper(function(req){
//do stuff after req.destroy was called
});
function buildDestroyWrapper(afterDestroy){
return function(req){
req.destroy();
afterDestroy(req);
};
}
//later, in your controller
function controllerAction(req,res,next){
destroyWrapper(req);
}
此方法允许您以不同方式处理销毁,具体取决于您传递给 buildDestroyWrapper 的回调。例如:
var logAfterDestroy = buildDestroyWrapper(function(req){
console.log("session destroyed");
});
var killAfterDestroy = buildDestroyWrapper(function(req){
process.kill();
});
function buildDestroyWrapper(afterDestroy){
return function(req){
req.destroy();
afterDestroy(req);
};
}
//later, in your controller
function logoutAction(req,res,next){
logAfterDestroy(req);
}
function killAppAction(req,res,next){
killAfterDestroy(req);
}