单设备登录,顾名思义,一个账号在一个app中只能在一个设备上进行登录。使用的场景例如:账号多端登录时云存档的一致性问题。
单设备登录常用的方法:
1. web端,session+cookie
这个方法具有一定的迷惑性,因为单设备登录在这个方法中实现是顺带的,session的作用主要是携带一些用户信息,用来做用户认证和单点登录。
单点登录
(Single Sign On)不同于单设备登录
,
单设备登录
就是只能在一个设备上登录,若同时在其他设备登录,先前登录的用户会被提醒:该账户在其他设备登录。
而单点登录
是指 用户只需要登录一次就可以访问所有相互信任的应用系统。用人话说就是:从一个系统登录以后,其他地方不用再登录,可直接访问。
使用这种方法(session+cookie)来做用户认证(web应用常见),如果采用前后端分离的方案,可以将userId和sessionId 进行绑定存储至redis(也可以使用别的全局唯一数据源来存储,如静态Map,或别的缓存中间件),如果redis 中该用户的sessionId改变,则说明用户异地登陆,原设备请求时通知设备下线。
对于前后端分离的方案,我不建议使用session进行用户认证,session的使用场景更针对web端,更适合用于前后端不分离的场景。
2. token一致性
使用token来做用户认证的话,可以选择token来代替session中session ID的作用,一个玩家维护一个token。
token一致,表示正常登陆。
token改变,说明用户异地登陆,原设备请求时通知设备下线。
token取不到表示未登录或token过期已下线。
3. 长连接
客户端使用websocket和服务端进行连接建立。在连接初始化后保存channel连接到服务端。在用户异地登陆后,给原连接推送异地登陆下线消息,并关闭连接。
如果单纯使用长连接来实现单设备这个功能,是有些杀鸡用牛刀的感觉。但如果别的业务场景必须使用到长连接进行处理,在长连接的基础上添加单设备登录无疑是效果最好的。如果你只是练手项目,那也可以拿来学习一下。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)