关于重复登陆的问题,如何使得先前登录的用户强制退出。

howloncampus 2008-10-28 03:47:31
本人菜鸟望各位大侠不要见笑:
本人做登陆画面,先前比较传统的用户ID和密码验证不说,说说我遇到的问题:

本人想限制用户的重复登陆,(判断重复登陆的代码已经完成),但是当我判断出用户重复登陆后,我想让先前登录的那个人强制退出,让自己强制登陆。请问如何实现?
谢谢
...全文
520 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
FlameLiu 2008-10-29
  • 打赏
  • 举报
回复
我觉得可以这样做。首先在ServletContext中存放一个Map,key为登陆名,value为该用户对应的Session(在ServletContextListener中做这件事),之后只要有用户登陆就根据该用户的登陆名到Map中去查一下,发现已经有Session的就让它失效(调用invalidate()),之后再将新的Session放到Map中。并且在你的web应用中加一个Filter,用于检查Session中是否有用户登陆信息,没有则强制返回登陆页面(由于调用了Session的invalidate()方法,肯定将先登陆用户的Session中的用户信息去除了)。
qiaodan814 2008-10-28
  • 打赏
  • 举报
回复
回楼上 你说的都知道,问题是怎么实现。 问题归结为,怎么拿到别人的session然后改状态。
非典型射手 2008-10-28
  • 打赏
  • 举报
回复
应该是每次在验证session的之前首先验证登陆地,就是说如果帐号在别处登陆了,即使我的session中是登陆状态,也要看成是退出状态,并且清除session中保留的信息
qiaodan814 2008-10-28
  • 打赏
  • 举报
回复
顶楼上。 怎么得到其他用户的session。 有没有达人告知。
freedom2001 2008-10-28
  • 打赏
  • 举报
回复
清除session?你这个session在哪?客户端的session你是清不了的,不用异地,你自己机器开2个窗口看看能不能清
海诗美妆 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 howloncampus 的回复:]
回楼上:我已经用Application实现了判断用户是否重复登录的功能了。。。。现在我要做的是想让远程登录的人强制下线。。。例如:你在苏州用我的帐号登录了,,,但是我现在在无锡也在用同样的帐号登录同一个系统,我现在已经能判断出来此帐号已经在苏州登录了,我需要作的是想让你强制下线,请问如何实现?
[/Quote]
清除session,返回相应的信息

UI方面就靠你的客户端了,要么javascript要么其他什么客户端程序。
如果还不理解,重新理解一下HTTP通信协议
howloncampus 2008-10-28
  • 打赏
  • 举报
回复
回楼上:我已经用Application实现了判断用户是否重复登录的功能了。。。。现在我要做的是想让远程登录的人强制下线。。。例如:你在苏州用我的帐号登录了,,,但是我现在在无锡也在用同样的帐号登录同一个系统,我现在已经能判断出来此帐号已经在苏州登录了,我需要作的是想让你强制下线,请问如何实现?
海诗美妆 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 howloncampus 的回复:]
回2楼:在我所了解的范围内,session是基于对话的,也就是我本机登陆和别人用别的机器远程登录属于不同的对话,如果这边可以或的别人的会话的话那么这个问题应该比较简单,但是我不知道如何获取别的登录用户的session,期待指教。


回3楼:在概要设计阶段没有设计数据库用户表中有一个登陆时间的字段。不好意思


清大家踊跃发言。。谢谢啊
[/Quote]

1.返回概要设计,修改数据库!
2.contenxt全域管理用户登录时间——方法类似用数据库管理
rcom10002 2008-10-28
  • 打赏
  • 举报
回复
如果不能用数据库,写文件好了
howloncampus 2008-10-28
  • 打赏
  • 举报
回复
回4楼:大哥,,如果概要设计时候数据库设计能有这个字段,我就没那么多烦恼啦。。唉。。。
忙碌的布谷鸟 2008-10-28
  • 打赏
  • 举报
回复
估计需要在数据库中添加字段,保存用户登陆状态(true,false)
session连接时,判断是否登陆,为true时,说明已经登陆。进行处理
为False时,没有登陆,可以登陆
session关闭时,将登陆状态设置成false。

注意同步机制的使用。
howloncampus 2008-10-28
  • 打赏
  • 举报
回复
回2楼:在我所了解的范围内,session是基于对话的,也就是我本机登陆和别人用别的机器远程登录属于不同的对话,如果这边可以或的别人的会话的话那么这个问题应该比较简单,但是我不知道如何获取别的登录用户的session,期待指教。



回3楼:在概要设计阶段没有设计数据库用户表中有一个登陆时间的字段。不好意思





清大家踊跃发言。。谢谢啊
海诗美妆 2008-10-28
  • 打赏
  • 举报
回复
用户桌面数据中保存最后的登陆时间,
所有登录的session在登陆时保存一个登陆时间,
每次访问相应的连接,都对数据库中的登陆时间和session中的登陆时间做对比,
如果,数据库中的登陆时间比session中的登陆时间早,证明有人从另一台电脑重新登陆,就可以提示相应的信息。
类似于MSN(MSN是基于web的聊天软件)。

但是,大多数web程序不需要这种功能,MSN比较特殊。
jianpc 2008-10-28
  • 打赏
  • 举报
回复
难道不是session嘛?

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧