永发信息网

java 实现后一个人登陆 踢掉前一个人登陆(同一个账号)

答案:4  悬赏:20  手机版
解决时间 2021-04-05 05:36
java 实现后一个人登陆 踢掉前一个人登陆(同一个账号)
最佳答案
你可以在数据库表中增加一个字段,
loginStatus(命名就随便了)

就设置2个值把 1和2(随便什么都行)

一个用户登录的时候,如果loginStatus的值是1,则将其更改为2 如果是2,则更改为1
这时候,将更改后的值存储在session中,
则每次进行有关用户操作的时候, 都去表中查看loginStatus的值跟你session中的值是否相同
如果不相同,则将session存储的用户信息remove掉

你会很奇怪,为什么会不同,
很简单:
如果此时,另外一个人登录的时候,走的是相同的业务逻辑,这时候会把loginStatus的值更改。
则前一个登录的人session中存储的loginStatus当然就不一样了追问非常感谢大虾的回答!
但是我不想通过操作数据库!有其他的办法吗追答这我想不出来额~

你想想 2台机器登录
一台机器登录了,此时第二台机器也登录了,就算第二台机器知道了第一台登录了。
但是,第二台机器是没有办法去清除掉第一台机器的session的,
唯一能联系2者之间的我想出来的只有数据库了。

或许你可以用application (这里必须要知道,当前登录用户是否已经登录)
登录过后 在application中存储对应的("用户名","1");
(这里存储键值为用户名好处在于,因为application是全站点用户都能用到的
不同的键值用来区分不同的登录用户)
并且在session中存储相同的数据

此时,相同的,第一台机器如果有关于用户的操作
则读取application中的这个值,如果对应的值不为空,则remove掉session

此时第二台机器,有用户操作的时候,读取session中存储的用户名,
来与application中存储的用户名来比较,相等则继续操作,不等则remove掉session

你会问,为什么要匹配这2个值:
因为第一台机器知道session没有了的时候,应该会再次登录,此时
application中的值会被修改为2(上面存储的是1,如果是2,则这里存储1)
并且别忘记往session中存储相应的值

这样不太推荐,因为毕竟 application 是要吃内存的 影响效率,而且这玩意儿很不稳定追问谢谢 回答!我采用了Application放了sessionid进行判别!很感谢!问题已解决!
全部回答
spring security可以实现 你可以看看
将登陆后的人存在session里面.追问能具体掉吗
对,spring security可以实现,只需要配置就行。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求助,我换了手机,结果车载蓝牙连不上了
电力PVC-C和PE哪个好/
你们为了梦想贫困潦倒过么?那么最终你坚持住
八字情话短句遇见你,你对我说的情话 我都还记
女人到底苗条好,还是丰满好看
柳宗元是在什么情况下写的江雪
在一次函数y=kx+b中,已知k?b<0,那么,在下
如何隐藏进程?
炉石传说黄金联赛秋季赛什么时候结束
她脸上写着什么意思
德国足球主教练勒夫身高
以未“未必”题的600字作文
磊科路由器和水星路由器哪个好
赵薇买的什么股票代码是多少
--WhereisPaul?--He________England.A.h
推荐资讯
分区助手迁移系统到SSD的原理是什么
如何通过“做空”赚钱
现在的人们如何过年
什么是钣金喷漆,汽车维修加盟中哪家钣金喷漆
山羊绒又细又柔软,织成的产品十分昂贵。山羊
急求洗浴中心对联,名字叫御尚洗浴
手游倚天屠龙记100级侠客咋打的
黑河的发源地
请问脸上长的这是什么
ck的戒指好吗?ck正品的戒指差不多多少钱?
冬笔顺怎么写,冬字的笔顺笔画顺序
多选题:文件列表中,选择连续的若干个文件的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?