MySQL-如何解决 相同帐号不能同时登录 的问题

服务器管理 服务器管理 主题:1035 回复:2217

MySQL-如何解决 相同帐号不能同时登录 的问题

偏爱自由 发布于 2017-06-20 字数 510 浏览 1172 回复 7

现在项目开发调试过程中出现了如下问题, 两个人员使用同一个帐号 进行 登录,在操作时 时常出现 相互干扰的操作,比如 1个人买了 另一个人又退了 我太阳哦

现在像 控制 下 对单用户不能多次同时登陆,刚开始的时候 我觉得很容易实现,不就将session实体化就能实现么??

当前有个问题悲催了, 如果A 用户登陆了,他并不是点退出按钮退出的,而是直接关浏览器的,在session有效间隔之内, 这个A 用户在别的地方就不能再登陆了,不管这个A 是不是回家了....
还是 在公司换了台电脑......

对于这个问题 你们是咋实现的呢,求解

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(7

浮生未歇 2017-09-25 7 楼

使用SSO登录方式,SSO登陆方式,Single Sign-On单点登录,是在统一用户数据基础上提供的多服务统一登录管理模块。控制多系统统一登录退出。用户登录后会生成相应的cookie,不管你有多少个系统,登录一次后其他系统就可以直接进去。

上面是解决统一登陆的问题,下面来说一下如何避免你说的那种情况,

首先 创建一个online表储存的是已登陆的用户,online的Key为SessionID,值将包含用户登录的信息,里面包括用户名、当前用户的IP地址或者MAC地址等。

当用户初次登陆时,获取当前用户名和当前用户名的会话Session.SessionID,当前用户的IP地址或者MAC地址存入数据库online

当用户在次进行登陆,那么判断这个用户的名和Session.SessionID是否匹配数据库,如果不匹配,那么在匹配一下登陆IP或者MAC地址,如果还是不匹配,则说明可能该用户并不是同一个用户在登陆这个系统(这种可能非常大).那么就不允许后者登陆,除非等到Session自动过期,在数据库写入该用户已经退出,或用户退出.

如果该用户的用户名和IP或者MAC地址相同,只是会话Session.SessionID不同,那么则可以很明确的说明这个用户是掉线或者非法断开,可以重写用户的登陆状态为未登陆,允许用户登录。

甜柠檬 2017-09-19 6 楼

我们也是采取踢人的方式,把当前登录的sessionid存入数据库,每次重复登录的时候,就把从数据库拿到的sessionid给踢掉,然后再把新的sessionid存进去。 spring security3就可以通过配置实现该功能,有空你可以研究下他的源码,看看人家如何做的

甜柠檬 2017-09-19 5 楼

楼主的逻辑其实是矛盾的 我们来看看楼主的问题

1 要求单用户不能多次同时登陆
2 A换了一台电脑 在session有效期之内 也要能够登陆上去
其实这个第二点的实质就是单用户多次同时登陆。。

解决方案:
加2字段,保存在线状态和session_id。
非法退出的,就只有以活动时效来决定是否允许后面的登陆

虐人心 2017-09-08 4 楼

我也赞成踢人的方式, 即后登陆的session踢掉以前的session; 而不是当前session会限制新的session登录.

如果考虑更好的用户体验, 是不是可以这样, 类似msn登录的实现:
如果有另一个session以同一用户账号登录, 则锁定两个session的当前页面, 提醒用户有多个登录, 强迫其选择: 退出当前登录 或 踢掉另一个登录.

以上仅是关于业务场景的想法, 不考虑具体实现.

偏爱自由 2017-09-03 3 楼

踢人 也是一种方式 后登陆的把先登录的踢出去就行了。。。。。。 能解决你的问题。。。。。

晚风撩人 2017-08-30 2 楼

按建在线表的基础再加一个用户操作时间的记录,然后定时执行更新最后操作时间,同时处理一定时间内没有操作行为用户。这张在线表最好使用内存数据库,以键值对的形式存放,以保证服务器发生意外影响用户登录。

归属感 2017-08-22 1 楼

你可以建一个在线表,用户登陆后在这个在线表里存一条记录,再将这个产生的主键id和用户id加密后存到cookie里,将产生的主键id作为内容用户id作为键值,存到memcahce里,检查用户登录时将cookie里的值解密后和memcache里的值进行比对,若一样就代表登陆,再登录时将在线表和memcac中的记录清除,再生成新的在线表id,原来登陆的那个cookie值就无效了,这样就可以了。