2013-03-05 60 views
2

场景:考虑一个登录系统(Node.js + Express + Socket.IO),它与用户名和密码相匹配,并允许用户访问已验证的页面。登录系统将会话Id存储为客户端的Cookie,并在每个经过验证的页面请求的服务器上对其进行验证,并相应地允许/禁止。如果同一用户从不同的浏览器或计算机登录,则强制注销。 Node.js + Express + Socket.IO

问题:现在,假设相同的用户登录,从不同的机器或浏览器,我想以前的用户,推动了会话过期页面,并显示信息,例如:“你可以从不同的浏览器登录。或机器,请不要共享密码欲了解更多信息,请访问:SomeLinkHere”

注:我只是不想无效用户登录会话,当从不同的浏览器或机用户登录,即使用户没有点击任何链接或请求任何进一步的身份验证页面,我也想将用户推送到会话过期页面。

这背后的主要意图:要避免这样的情况,例如:“如果用户正在观看一些诸如现场报道敏感数据(即上socket.io仪表盘),并分享他的密码告知他人”

问:由于socket.io已在使用报告实时数据,这怎么可能没有超载现有socket.io连接实现?

回答

5

这可以使用。

  1. 如在应用程序中的用户进行身份验证,而客户做他们还通过用户ID(或任何其他唯一标识符)与连接功能的呼叫连接。 像:

    socket.on('connect', function(){ 
        socket.emit('adduser', userID); 
    }); 
    
  2. 在服务器保持一个JSON阵列保持相关联的用户ID信息插座。 像:

    [{'USERID1':'SOCKETID1'},{'USERID2':'SOCKETID2'}....,{'USERIDN':'SOCKETIDN'}] 
    
  3. 当新用户确实插座式连接器,我们检查的用户ID已经存在在数组中。 像

    socket.on('adduser', checking function here); 
    
  4. 如果它已经存在,则迫使现有的断开 和更新JSON数组新的socketid。

    这里是一个reference

相关问题