移动设备单点登录如何实现?

TommyWu01 2013-11-26 03:55:32
apk 客户端,怎么保证一个账号只能在一台设备上登录?

当 A手机登录 user1账号,B手机再登录user1账号时,将A手机的登录状态挤掉!

如何实现?

移动设备的单点登录解决方案
...全文
5737 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinggm 2015-08-24
  • 打赏
  • 举报
回复
引用 8 楼 huahuagongzi9999 的回复:
[quote=引用 5 楼 ghw554557313 的回复:] 这个功能我前几天刚用websocket实现了个,我们项目中需求iso,android手机用户不能重复登录, 如果发生重复登录,就会挤掉原先的登录,并且即时提示给用户 推荐用websocket,tomcat7有实现的demo,可以参考一下 websocket超强的nio封装,实现浏览器或移动终端类似功能简直堪称神器!
我的思路是: 用户登录的时候在session中存入userid和imei, 比如: userId:10000 现在有两台手机,分别为: A 设备 imei 111111111111111 B 设备 imei 2222222222222222 当在A设备登录时,1 判断session是否有记录;无记录,设置session,2 有记录,则判断是否是同一设备;是,则不管 ,如果不是,则往之前的设备推送一条被迫下线的通知,并将新的IMEI设置进session中 原理上,感觉这样可以实现,但是session是有失效时间的,如果失效了,则在当账号在B设备登录时,是无法获取A设备登录时的IMEI进行推送被迫下线的通知的 [/quote]当用户第一次登录的时候,可以通过接口把设备上的设备号imei保存在服务端的数据库,而不是通过session,在其它设备登录由于数据库设备信息不同,就需要手机验证重新登录等方式修改后台数据的设备号,而且sessio的时效性问题也可以在后台给一个时间点,到时间点的时候就重新续期,断网或者其它原因token失效就重新登录,我的想法是这样的。。。。 另一种就是类似微博,QQ了采用oauth机制来认证,虽然麻烦,但是挺好用的。。。
javatotheworld 2014-07-31
  • 打赏
  • 举报
回复
楼主有解决方案吗,最近也在研究这方面内容
TommyWu01 2013-12-11
  • 打赏
  • 举报
回复
引用 15 楼 s5028360 的回复:
使用struts2的过滤啊....登录的时候把session id和一个唯一标示 加到数据库 利用过滤器 所有请求都调用 方法 主要检查是否登录, 登录就返回已登录....
没使用struts,只是用了springMVC +hibernate
springss 2013-12-10
  • 打赏
  • 举报
回复
使用struts2的过滤啊....登录的时候把session id和一个唯一标示 加到数据库 利用过滤器 所有请求都调用 方法 主要检查是否登录, 登录就返回已登录....
TommyWu01 2013-12-07
  • 打赏
  • 举报
回复
引用 12 楼 ghw554557313 的回复:
[quote=引用 8 楼 huahuagongzi9999 的回复:] [quote=引用 5 楼 ghw554557313 的回复:] 这个功能我前几天刚用websocket实现了个,我们项目中需求iso,android手机用户不能重复登录, 如果发生重复登录,就会挤掉原先的登录,并且即时提示给用户 推荐用websocket,tomcat7有实现的demo,可以参考一下 websocket超强的nio封装,实现浏览器或移动终端类似功能简直堪称神器!
我的思路是: 用户登录的时候在session中存入userid和imei, 比如: userId:10000 现在有两台手机,分别为: A 设备 imei 111111111111111 B 设备 imei 2222222222222222 当在A设备登录时,1 判断session是否有记录;无记录,设置session,2 有记录,则判断是否是同一设备;是,则不管 ,如果不是,则往之前的设备推送一条被迫下线的通知,并将新的IMEI设置进session中 原理上,感觉这样可以实现,但是session是有失效时间的,如果失效了,则在当账号在B设备登录时,是无法获取A设备登录时的IMEI进行推送被迫下线的通知的 [/quote] 是的,不管你用的session保存还是ThreadLocal方式在后台做存储,都可以用websocket实现推送 websocket是在后台把不同客户端的访问一次性进行绑定,维持连接 如果一方发生变化,另一方立马会做出改变 试试吧[/quote] 推送我可以用百度云推送,我们的应用里面IM有用到百度云推
致知Fighting 2013-12-06
  • 打赏
  • 举报
回复
引用 11 楼 huahuagongzi9999 的回复:
[quote=引用 10 楼 ygycomon 的回复:] [quote=引用 9 楼 huahuagongzi9999 的回复:] [quote=引用 7 楼 ygycomon 的回复:] 既然是客户端,自己实现一个推送就好了,检查到有重复登录的情况,就把通知之前登录的设备,强制用户下线
我是负责java接口端的,用户登录及退出、包括推送消息都是我这边实现 现在是想找一个比较好的实现单点登录的方式, 保证同一账号只能在一台设备上登录,不能同时在多台手机设备上登录,不区分android还是ios系统[/quote] 比较简单的方式就是仿造http的登录态,登录之后给客户端发一个token,在服务器端记录下token和用户的映射标示这个用户已经登录,接收到登录请求的时候先检查一下用户有没有登录,如果有登录,给以前登录的客户端推送一个消息把它踢下线 这种方式比较简单,但是有安全问题, 一旦用户截获了token,就可以仿造用户登录,在安全系数要求不高的场景可以用[/quote] 还是得用到session吗?[/quote] session是web端的东西,你一个android客户端,是cs结构,哪来的session?
ghw554557313 2013-12-06
  • 打赏
  • 举报
回复
引用 8 楼 huahuagongzi9999 的回复:
[quote=引用 5 楼 ghw554557313 的回复:] 这个功能我前几天刚用websocket实现了个,我们项目中需求iso,android手机用户不能重复登录, 如果发生重复登录,就会挤掉原先的登录,并且即时提示给用户 推荐用websocket,tomcat7有实现的demo,可以参考一下 websocket超强的nio封装,实现浏览器或移动终端类似功能简直堪称神器!
我的思路是: 用户登录的时候在session中存入userid和imei, 比如: userId:10000 现在有两台手机,分别为: A 设备 imei 111111111111111 B 设备 imei 2222222222222222 当在A设备登录时,1 判断session是否有记录;无记录,设置session,2 有记录,则判断是否是同一设备;是,则不管 ,如果不是,则往之前的设备推送一条被迫下线的通知,并将新的IMEI设置进session中 原理上,感觉这样可以实现,但是session是有失效时间的,如果失效了,则在当账号在B设备登录时,是无法获取A设备登录时的IMEI进行推送被迫下线的通知的 [/quote] 是的,不管你用的session保存还是ThreadLocal方式在后台做存储,都可以用websocket实现推送 websocket是在后台把不同客户端的访问一次性进行绑定,维持连接 如果一方发生变化,另一方立马会做出改变 试试吧
TommyWu01 2013-12-06
  • 打赏
  • 举报
回复
引用 10 楼 ygycomon 的回复:
[quote=引用 9 楼 huahuagongzi9999 的回复:] [quote=引用 7 楼 ygycomon 的回复:] 既然是客户端,自己实现一个推送就好了,检查到有重复登录的情况,就把通知之前登录的设备,强制用户下线
我是负责java接口端的,用户登录及退出、包括推送消息都是我这边实现 现在是想找一个比较好的实现单点登录的方式, 保证同一账号只能在一台设备上登录,不能同时在多台手机设备上登录,不区分android还是ios系统[/quote] 比较简单的方式就是仿造http的登录态,登录之后给客户端发一个token,在服务器端记录下token和用户的映射标示这个用户已经登录,接收到登录请求的时候先检查一下用户有没有登录,如果有登录,给以前登录的客户端推送一个消息把它踢下线 这种方式比较简单,但是有安全问题, 一旦用户截获了token,就可以仿造用户登录,在安全系数要求不高的场景可以用[/quote] 还是得用到session吗?
致知Fighting 2013-12-06
  • 打赏
  • 举报
回复
引用 9 楼 huahuagongzi9999 的回复:
[quote=引用 7 楼 ygycomon 的回复:] 既然是客户端,自己实现一个推送就好了,检查到有重复登录的情况,就把通知之前登录的设备,强制用户下线
我是负责java接口端的,用户登录及退出、包括推送消息都是我这边实现 现在是想找一个比较好的实现单点登录的方式, 保证同一账号只能在一台设备上登录,不能同时在多台手机设备上登录,不区分android还是ios系统[/quote] 比较简单的方式就是仿造http的登录态,登录之后给客户端发一个token,在服务器端记录下token和用户的映射标示这个用户已经登录,接收到登录请求的时候先检查一下用户有没有登录,如果有登录,给以前登录的客户端推送一个消息把它踢下线 这种方式比较简单,但是有安全问题, 一旦用户截获了token,就可以仿造用户登录,在安全系数要求不高的场景可以用
TommyWu01 2013-12-06
  • 打赏
  • 举报
回复
引用 7 楼 ygycomon 的回复:
既然是客户端,自己实现一个推送就好了,检查到有重复登录的情况,就把通知之前登录的设备,强制用户下线
我是负责java接口端的,用户登录及退出、包括推送消息都是我这边实现 现在是想找一个比较好的实现单点登录的方式, 保证同一账号只能在一台设备上登录,不能同时在多台手机设备上登录,不区分android还是ios系统
TommyWu01 2013-12-06
  • 打赏
  • 举报
回复
引用 5 楼 ghw554557313 的回复:
这个功能我前几天刚用websocket实现了个,我们项目中需求iso,android手机用户不能重复登录, 如果发生重复登录,就会挤掉原先的登录,并且即时提示给用户 推荐用websocket,tomcat7有实现的demo,可以参考一下 websocket超强的nio封装,实现浏览器或移动终端类似功能简直堪称神器!
我的思路是: 用户登录的时候在session中存入userid和imei, 比如: userId:10000 现在有两台手机,分别为: A 设备 imei 111111111111111 B 设备 imei 2222222222222222 当在A设备登录时,1 判断session是否有记录;无记录,设置session,2 有记录,则判断是否是同一设备;是,则不管 ,如果不是,则往之前的设备推送一条被迫下线的通知,并将新的IMEI设置进session中 原理上,感觉这样可以实现,但是session是有失效时间的,如果失效了,则在当账号在B设备登录时,是无法获取A设备登录时的IMEI进行推送被迫下线的通知的
致知Fighting 2013-12-06
  • 打赏
  • 举报
回复
既然是客户端,自己实现一个推送就好了,检查到有重复登录的情况,就把通知之前登录的设备,强制用户下线
ghw554557313 2013-12-06
  • 打赏
  • 举报
回复
引用 5 楼 ghw554557313 的回复:
这个功能我前几天刚用websocket实现了个,我们项目中需求iso,android手机用户不能重复登录, 如果发生重复登录,就会挤掉原先的登录,并且即时提示给用户 推荐用websocket,tomcat7有实现的demo,可以参考一下 websocket超强的nio封装,实现浏览器或移动终端类似功能简直堪称神器!
ios...
ghw554557313 2013-12-06
  • 打赏
  • 举报
回复
这个功能我前几天刚用websocket实现了个,我们项目中需求iso,android手机用户不能重复登录, 如果发生重复登录,就会挤掉原先的登录,并且即时提示给用户 推荐用websocket,tomcat7有实现的demo,可以参考一下 websocket超强的nio封装,实现浏览器或移动终端类似功能简直堪称神器!
TommyWu01 2013-12-06
  • 打赏
  • 举报
回复
引用 3 楼 huxiweng 的回复:
[quote=引用 2 楼 huahuagongzi9999 的回复:] [quote=引用 1 楼 huxiweng 的回复:] 把A的session/cookie干掉
服务端如何操作?需要监控吗? 客户端如何操作?需要做个定时器吗?还是推送[/quote] 当然是服务器端清session啊。移动请求服务器端本身就没session可言。但是如果你自己实现了利用cookie实现了session的功能,那就和web一样清除session即可[/quote] 但是 session 是有有效时间的
teemai 2013-11-26
  • 打赏
  • 举报
回复
引用 2 楼 huahuagongzi9999 的回复:
[quote=引用 1 楼 huxiweng 的回复:] 把A的session/cookie干掉
服务端如何操作?需要监控吗? 客户端如何操作?需要做个定时器吗?还是推送[/quote] 当然是服务器端清session啊。移动请求服务器端本身就没session可言。但是如果你自己实现了利用cookie实现了session的功能,那就和web一样清除session即可
TommyWu01 2013-11-26
  • 打赏
  • 举报
回复
引用 1 楼 huxiweng 的回复:
把A的session/cookie干掉
服务端如何操作?需要监控吗? 客户端如何操作?需要做个定时器吗?还是推送
teemai 2013-11-26
  • 打赏
  • 举报
回复
把A的session/cookie干掉

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧