我怎样才能听到会话被破坏的事件?

时间:2015-01-05 16:37:50

标签: node.js sails.js

我目前正在使用Sails.JS开发一个应用程序。

我想计算在线用户的数量并在登录/退出或会话到期后更新它,但我不知道如何实现会话销毁事件之类的内容并且无法更新号码在没有用户注销的情况下会话过期的在线用户。

2 个答案:

答案 0 :(得分:2)

如上所述,默认会话实现中没有此类事件,Sails会话接近ExpressJs Session,我建议您阅读有关ExpressJs会话的文章:

http://expressjs-book.com/forums/topic/express-js-sessions-a-detailed-tutorial/

然后,为了达到你想要的目的,一个想法可能是使用store并在其中进行查询。

您是否考虑过其他解决方案,例如使用socket.io(内置风帆)并在登录时将用户添加到频道中,然后只是计算频道内的用户?

答案 1 :(得分:2)

你可以像这样包装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);
}