数据库表中加一个标志字段,登陆时判断是no才登陆,并且把标志字段变为yes,退出的时候变为no.但这种方法有一个弊端,就是用户直接关闭IE,就没有办法把标志字段变为no了

解决方案 »

  1.   

    你需要做的一点就是记录用户user1的登录信息到服务器(文件,数据库或是servletContext)
    然后登录时先从那些文件、数据库或是servletContext中判断user1是否在线
    是则退出登录并给出提示信息不过麻烦不在这儿,而是如何判断用户非正常退出系统,比如不经过注销而是直接关闭浏览器,又或者用户的网络掉线、电脑突然断电等等要知道,http是无状态的连接,除非你通过一些手段主动通知服务器,否则服务器是无法得知浏览器端的实时信息的
      

  2.   

    我觉得一个同名用户登陆到系统中应该是这样:如果有同名用户登录,把前面一个用户踢出系统.而不是不让后面的同名用户登录.道理很简单,如果一个用户关了浏览器你不知道,他要是在登录就登不进去了.如果是我说得这种情况,你可以这么做:把用户和session对象一一对应,置入一个Map中,每次登录的时候检查当前用户是否已经在这个Map中,如果有,并且session不相等(==),就把前一个session置为无效;如果当前用户不在Map中,置入。用户退出,从Map中remove,并且置session无效;session自动过期,从Map中remove。
    需要注意的是,这些操作必须同步。
      

  3.   

    steven,你这样做的效率如何?如果并发登陆用户多的时候,会不会造成用户难以登陆的情况?
      

  4.   

    to lukelan(现代原始人):
    并发我没有测试,因为我的系统没有这个要求.因为有同步操作,肯定在并发上有影响,不过我感觉不会非常大,毕竟登录和登出不会非常频繁,谁没事儿干进进出出的:)