626364708的gravatar头像
626364708 2018-02-23 15:12:00

如何实现一个账号同一时间只能1个人登入使用?

问题描述

   一个账号同一时间只能1个人登入使用,第2个人登入时,自动把第一个登入的人退出,并提示他。

所有回答列表(8)
清晨的阳光好美的gravatar头像
清晨的阳光好美 2018年2月23日

账号和session绑定

626364708的gravatar头像
626364708  LV4 2018年2月23日

能给个例子吗?

BovenRaye的gravatar头像
BovenRaye  LV10 2018年2月23日

可以在服务器端做记录,查看该用户是否登录

遇见,的gravatar头像
遇见,  LV36 2018年2月24日

1. 登录记录账号和sessionid ,同一个账号再次登录先判断是否已经登录 如果已经登录将之前的session根据sessionid清除。

2. 在拦截器中验证session是否存在,如果不存在并且在登录记录中有数据,说明是被同一个账号踢掉的,提示用户账号被踢出。

3. 如果真要考虑同一时间,要在登录时加入锁。

sevenvsky的gravatar头像
sevenvsky  LV27 2018年2月24日

单点登陆

吢涼ㄋ的gravatar头像
吢涼ㄋ  LV11 2018年2月28日

利用redis可以实现:

1、假如帐号A在设备a登录成功后,把登录时间记录到cookie中,同时把登录时间放到redis中,key=cache:login:userId, value={"userName": "张三", "loginTime":"2018-02-28 10:00:00","deviceId":"11111111"}

2、帐号A在设备b登录,根据key,查找当前redis有没记录,如果有,拿到上一个deviceId=11111111,发送推送,把设备111111踢下线

3、假如登录的不是移动设备,而且pc浏览器,可以在拦截器中校验,cookie中登录时间是否与redis中登录时间一致,如果不一致,说明当前浏览器登录无效,清空cookie,并强制退出登录

寒樱玉冕的gravatar头像
寒樱玉冕  LV12 2018年3月5日

最简单的  方式  hashtable<userId,sessionId>   用户每次登录时  存入  退出时  减少

  用户第二次登录 判断用户是否 已登录   登录的话 就将以前的用户的session清楚。。

 整个项目 要用到过滤器  每访问一个链接 判断用户是否登录 如果没有  就退出到首页

anrerbo的gravatar头像
anrerbo  LV3 2018年4月3日

这个问题要分类。

首先,“自动把第一个登入的人退出,并提示他”是否需要实时?如果需要的话,就涉及到所谓的“服务端通知客户端”的功能了。简单一点,无需实时的话,随便怎么都可以。

好,需要实时d的话,刚才提到的x需要类似“服务端通知客户端”的功能。按照常规实现方式,三种:轮询,长连接,websocket。当然,我指的仅仅是web端。随便哪种都可以的。

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友