【问题标题】:How can I listen to session destroyed event?如何收听会话被破坏的事件?
【发布时间】:2015-01-05 16:37:49
【问题描述】:

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

我想计算在线用户的数量并在他们登录/注销或会话到期后更新它,但我不知道如何实现诸如会话销毁事件之类的东西,并且无法随时更新在线用户的数量会话在用户未注销的情况下过期。

【问题讨论】:

  • IMO,更好的方法是获取过去 X 分钟内的活跃用户数
  • 有道理,但我仍然对会话事件或类似的东西感到好奇。
  • 没有这样的事件,只有创建自己的会话存储并控制其所有行为才有可能

标签: node.js sails.js


【解决方案1】:

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

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

然后,为了实现您想要的一个想法可能是使用store 并在其中查询。

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

【讨论】:

    【解决方案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);
    }
    

    【讨论】:

    • 当然,我是 Node、Express 和 Sails 的新手,但我并没有完全关注。这似乎没有正确包装会话销毁,而是似乎只是在调用请求销毁方法的控制器中调用的手动调用方法,我看不出它与会话销毁直接相关,因为它存在于请求之间。我错过了什么吗?
    猜你喜欢
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2013-10-31
    • 2012-07-24
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多