系统启动的时候开启一个线程,间隔一定时间扫描一次登陆用户,如果没有新的url请求就认为用户下线,这样是个简单的办法,最准确的办法是结合session,设置过期时间

解决方案 »

  1.   

    最准确的办法是结合session,设置过期时间
    这怎么讲?
    我在web.xml里面设置了一个session的过期时间是永远不过期
    是为了防止过了20分钟,session为null
      

  2.   

    如果是用户吊线或死机,服务器端是判断不了状态的。所以还是需要session。
      

  3.   

    应该是session虽然不会,但是看了些书上说的就是用这种方法实现对客户端的监控
      

  4.   

    我做过, 要用到一个Application程序,假如还不了解的话,QQ:175610058
      

  5.   

    是要用一个字段控制用户的登陆状态,比如0为未登陆,1为登陆。
    当服务器启动和关闭的时候,用SessionContextListener监听器把所有用户的登陆状态设置为0。
    这样的话,不管服务器是不是会死机,只要他启动和关闭的时候,都会设置用户为离线状态!
      

  6.   

    SessionContextListener,没听过
    这是我写的
     try{
            
       Ouser user = (Ouser)dy.get("user"); 
       Ouser ou=bo.getLogin(user);
       if( ou == null){
           return mapping.findForward("no");//用户名密码错误
        }else{
            String username=ou.getUserid();
             System.out.println(username);
            if(request.getSession().getServletContext().getAttribute(username) == null){
                System.out.println("第一次登陆");
                request.getSession().getServletContext().setAttribute(username, username); 
                request.getSession().setAttribute("user",user);
             return mapping.findForward("success");    
            }else{
             request.getSession().invalidate();         
              return mapping.findForward("loginAgain");  
           }    
       }  
    }catch(Exception e){当我打开2个网页,输入一样的用户名可以判断是重复登陆
    但是当我把2个网页全部关闭,在打开一个网页,输入刚才
    的用户名,却提示说已经登陆,我向这是和Application有关把
    请问该怎么改?
      

  7.   

    应该是关闭网页的时候,session依然存在,将所有打开的页面都关闭试试。不过session的释放确实头疼,也许是其它问题,关注中...
      

  8.   

    正常关闭是可以控制session的,但是吊线或死机就不行了,只能等timeout了
      

  9.   

    这就不是正常关闭的,而且我设置了timeout为不过期