如何让同一个账号只能在一个连接上登陆?
发布于 8 个月前 作者 liangdas 599 次浏览 来自 分享

w 我发现同一个账号可以同时登陆,也就是说不能做到互斥,比如账号A在S1机器上登陆了,当在S2的机器登陆就会把S1踢下来。目前我找了半天没有发现直接的办法。在Login模块session管理的时候只是管理当前的session,这个没有办法实现我说的功能 q 你搞一个单独的模块来管理用户信息,比如用一个redis保存每一个userId的session信息,login模块在鉴权时先查一下这个userdid是否已经存在了,如果存在就把那个链接关了

你不是要保证一个userid只能有一个session吗?那你就得在绑定新的userid之前把旧的session关了啊

q 每个用户登录时候,绑定userid之前去redis查一下有没有这个userid的值,如果有就代表已经有sessoin登录了,那么就可以先关闭,如果没有就对这个session进行绑定,同时把这个session存到redis里面,key就是userid

关闭了就是把上一个链接换了,然后把新的替换进去就行

注: gate.Session这个结构体有一个序列化函数和反序列化函数 序列化函数: 结构图—>byte[] 反序列化函数: byte[]–>gate.Session 因此gate.Session就可以被保持到数据库中

2 回复

@liangdas 最近几天没看到有新的更新啊。半个月前的那次更新包括了这个优化? 只是给你一个实现思路,框架不会来做这种东西

回到顶部