永发信息网

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

答案:4  悬赏:20  手机版
解决时间 2021-04-05 05:36
  • 提问者网友:沉默的哀伤
  • 2021-04-04 13:42
java 实现后一个人登陆 踢掉前一个人登陆(同一个账号)
最佳答案
  • 五星知识达人网友:野慌
  • 2021-04-04 13:57
你可以在数据库表中增加一个字段,
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进行判别!很感谢!问题已解决!
全部回答
  • 1楼网友:舊物识亽
  • 2021-04-04 17:36
spring security可以实现 你可以看看
  • 2楼网友:渡鹤影
  • 2021-04-04 16:24
将登陆后的人存在session里面.追问能具体掉吗
  • 3楼网友:底特律间谍
  • 2021-04-04 14:46
对,spring security可以实现,只需要配置就行。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯