关于ejabberd限制单点登录

Posted erlang/golang 码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ejabberd限制单点登录相关的知识,希望对你有一定的参考价值。

ejabberd 是对xmpp协议的完全实现,那么单纯的ejabberd是不提供该功能限制的,但是从我们的xmpp协议则可以完全的解决这个问题,我们通过jid对它进行限制,下面可以看一下jid的解释:

完整JID

完整的Jid包括 [email protected]/resource

Node/Username

用户名/节点 用户的基本标识

Domain

登陆的XMPP服务器域名

Resource

重点就是这里!
资源/来源,用于区别客户端来源,xmpp协议设计为可多客户端同时登陆,resource就是用于区分同一用户不同端登陆

 

除去resource部分,包含[email protected]

当我们调用Client端的登陆jid的格式是 比如 [email protected]/wanglei_macbook

另外如果我在windows下用我同样的账号jid是这样
[email protected]/wanglei_windows

如果我们从ejabberd端将resource修改成一致的或者从client端调用登陆的时候统一resource 则macbook登陆后windows再登陆就会把macbook的登陆用户顶下来掉线,达到我们的功能实现。

 

即当Username 和 resource 相同的时候,第二次登录的设备会把第一次登录的设备挤掉。

 

还有一个关键点:

在ejabberd.yml 配置文件中,max_user_sessions  10

含有 max_user_sessions 这个参数,其含义为:允许单个用户的同步会话的最大数目. ejabberd默认设置的是10 。

 

有相关的max_user_sessions设置每个用户最多登录的session数目,建议设置小于等于2,防止重复登录。

 

 

 

原文链接:http://www.jianshu.com/p/845f63dc24f1

以上是关于关于ejabberd限制单点登录的主要内容,如果未能解决你的问题,请参考以下文章

关于单点登录原理与简单实现,写的太好了一看就懂!

关于CAS实现单点登录

cas 单点登录 关于server获取用户名的问题

关于cas单点登录拒绝连接的问题...................

关于单点登录第一天接触之我见

Cookie同域,跨域单点登录(转)