如何收听会话销毁事件?

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);
}