请教:如何实现单用户登陆

lukelan 2004-03-22 03:53:34
在B/S方式中,有什么方法实现只能有一个同名用户登陆到系统中,
就是说如果user1已经登陆了,其他人再用user1就不能登陆了。


...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lukelan 2004-03-23
  • 打赏
  • 举报
回复
还有方案吗?晚上结贴!
steven_cheng 2004-03-22
  • 打赏
  • 举报
回复
to lukelan(现代原始人):
并发我没有测试,因为我的系统没有这个要求.因为有同步操作,肯定在并发上有影响,不过我感觉不会非常大,毕竟登录和登出不会非常频繁,谁没事儿干进进出出的:)
lukelan 2004-03-22
  • 打赏
  • 举报
回复
steven,你这样做的效率如何?如果并发登陆用户多的时候,会不会造成用户难以登陆的情况?
steven_cheng 2004-03-22
  • 打赏
  • 举报
回复
我觉得一个同名用户登陆到系统中应该是这样:如果有同名用户登录,把前面一个用户踢出系统.而不是不让后面的同名用户登录.道理很简单,如果一个用户关了浏览器你不知道,他要是在登录就登不进去了.

如果是我说得这种情况,你可以这么做:

把用户和session对象一一对应,置入一个Map中,每次登录的时候检查当前用户是否已经在这个Map中,如果有,并且session不相等(==),就把前一个session置为无效;如果当前用户不在Map中,置入。用户退出,从Map中remove,并且置session无效;session自动过期,从Map中remove。
需要注意的是,这些操作必须同步。
zcjl 2004-03-22
  • 打赏
  • 举报
回复
你需要做的一点就是记录用户user1的登录信息到服务器(文件,数据库或是servletContext)
然后登录时先从那些文件、数据库或是servletContext中判断user1是否在线
是则退出登录并给出提示信息

不过麻烦不在这儿,而是如何判断用户非正常退出系统,比如不经过注销而是直接关闭浏览器,又或者用户的网络掉线、电脑突然断电等等

要知道,http是无状态的连接,除非你通过一些手段主动通知服务器,否则服务器是无法得知浏览器端的实时信息的
mtou 2004-03-22
  • 打赏
  • 举报
回复
数据库表中加一个标志字段,登陆时判断是no才登陆,并且把标志字段变为yes,退出的时候变为no.但这种方法有一个弊端,就是用户直接关闭IE,就没有办法把标志字段变为no了

67,513

社区成员

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

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