为了账号安全,请及时绑定邮箱和手机立即绑定

想要实现控制用户不能同时在多处登录?该怎么做?

想要实现控制用户不能同时在多处登录?该怎么做?

千巷猫影 2022-09-02 15:11:24
系统要求用户在使用过程当中,不能再以此用户重复登录系统,请问下大家都是用的怎样一个方案解决的?
查看完整描述

2 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

这样来解决,
用户再次登录的话,在登陆中判断是否存在用户的信息
如果存在提示用户重复登陆,并注销上次登陆。

查看完整回答
反对 回复 2022-09-06
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

分两种情况:

一. 如果用户001在客户端A登录, 然后在客户端B登录, 系统强制A下线.

二. 如果用户001在客户端A登录, 然后在客户端B登录, 提示001已经登录, 禁止其登录.

下面介绍下我对方案二的看法:

在集群的情况下, 需要使用中心的cache集群(比如memcached). 为了达到一个时刻一个用户仅有一个会话, 需要做一个userId(用户在系统的唯一标识, 或者memberId之类的)的缓存. 下面几个问题需要注意:

  1. 当用户登录时, 首先需要查询当前用户对应的userId在缓存中是否已经存在. 如果存在, 拒绝登录

  2. userId在缓存中的超时时间应该和session保持一致. 当访问系统时, 同时也需要延长userId的生命周期. 可以每N分钟刷新一次.

  3. 当系统退出时, 在清除session的同时也需要清除userId.

  4. 存在的问题: 如果客户端是浏览器. 在用户001在浏览器A登录后, 以非常规的方式登出, 比如关闭浏览器而不是点击登出按钮, 此时服务中userId的缓存任然存在, 用户无法在其他浏览器中登录, 只能等到缓存失效后方能登录. 基于这个原因. 我推荐选择方案一

查看完整回答
反对 回复 2022-09-06
  • 2 回答
  • 0 关注
  • 237 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信