同一账号,如何实现另一用户登陆后,之前用户自动下线

dashixionglihai
  • 436

如题,如何实现?

回复
阅读 5.1k
7 个回答

我把我之前的实现过程讲一下,希望对你有帮助.
之前的项目是多个应用,一个应用专门用于处理登陆.也就是所谓的单点登陆(sso),登陆之后会用户信息存到redis中,30分钟会自动过期.存放方式为UUID->用户信息,之后uuid会缓存到客户端的cookie,之后客户每次请求都会去redis查一下该uuid是否存在,如果存在,则重置30分钟后过期,如果不存在,则跳到登陆页面重新登陆.

如果有另外一个帐号登陆,则在redis中查询该用户是否已经存在一个uuid,有则将旧的的uuid删除.添加新的uuid->用户信息的数据.

这样就实现了同一个帐号,同时只能登陆一次.

1、你可以重写session的存储,然后登录的时候,把之前此用户登录的session删掉即可。这个是最好的解决方案。
2、你可以每次请求的时候判断用户的UA和最后一次登录的UA是否一致,如果不一致你就让这个用户退出就行了。

可以在每次登录时生成一个随机token 存放在用户表和cookie中 鉴权时校验token是否一致

使用acces_token就可以了,每次登录会生成一个token,然后将token存在webstorage或者cookie里面,在交互的时候,带上storage或者cookie中的token,检查是否一致,token不一致的用户就直接下线了

1.user表(这个就是普通用户表)
2.authorize表,存放tokentoken(char(8)),user_id,created_at,expires_at
3.登录后将该user_id的authorize表记录全部设为过期,在authorize中插入一条记录,并返回token。
4.使用token进行接口请求,如果authorize不存在记录或者记录已过期,则登录过期

由于token在服务端永远只有一个有效,所以保证了只能一个客户端同时在线

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏