我想实现一个功能,就是我的页面登录后,如果用户在另一个地方登录了,在这边会提示说“用户已经在别的地方登录”,然后在边被强制退出,请问该怎么实现(我是用JSP的)?就类似QQ,你的用户在别的地方登录,你就会下线,应该怎么做呢?
最好是能给个例子让我看一下,谢谢!

解决方案 »

  1.   

    可以用session保存用户的Ip  然后每连接一次就判断是不是同一个Ip 
      

  2.   


    http是无状态的,推的技术,是无法实现的吧 。页面不挺的刷,用ajax,就行了,不需要进行页面的刷新。
      

  3.   

    http://www.seomg.cn/article.asp?id=127  写的不是好。。能实现希望对你有帮助
      

  4.   

    所谓自动退出,是否理解成,他不能进行后续的(服务器端)操作?如果可以,则比较简单。1.1 加张表或字段,标识每个用户最后登录的session id(针对多个应用服务器)
    1.2 内存中放一个userId-sessionId的map(针对单个服务器)
    2 加个过滤器,检查登录用户的session id与之是否匹配(为效率见,数据库方式的建议缓存),如不匹配,则执行(服务器端的)logout,例如session.invalidate();这个太杀鸡用牛刀了,为了概率不高的同时登录,而对所有HTTP连接使用这个技术,性价比太低了。
    Ajax也可以,但是个人感觉也有点浪费了。
      

  5.   

    登陆的时候直接找个SERVLET验证一下不就好了
      

  6.   

    就是因为http是无状态的,无需保持连接.一般的做法是一旦其它地方登陆之后,之前登陆的页面再有新请求,则提示需要重新登陆.1楼说的对的.放在Session中,每次请求比下IP.
      

  7.   

    可以建一个session监听类,把登入人id,或那么
       存入session中,把所有的session存入一个集合中
    public void sessionCreated(HttpSessionEvent e) {
    // TODO Auto-generated method stub

    HttpSession session = e.getSession();
    System.out.println("session-------->:"+session);
    ServletContext application =session.getServletContext();
    HashSet<HttpSession> sessionSet =(HashSet)application.getAttribute("sessionSet");
    if(sessionSet == null){
     sessionSet = new HashSet<HttpSession>();
    }

    Iterator it = sessionSet.iterator();
    while(it.hasNext()){
    HttpSession sess =(HttpSession)it.next();
    if(sess.getAttribute("name") == null){   //session过时,就自动删除
    sessionSet.remove(sess);
    }
    }



    application.setAttribute("sessionSet", sessionSet);
    sessionSet.add(session);
    } public void sessionDestroyed(HttpSessionEvent e) {
               HttpSession session = e.getSession();
    ServletContext application =session.getServletContext();
    HashSet<HttpSession> sessionSet =(HashSet)application.getAttribute("sessionSet");
    if(sessionSet != null){
    sessionSet.remove(session);
    }
    }
    这个HashSet集合存在application中,当用户登入时可以拿出来,判断用户是否已经登入过
    有个缺点就是,当用户访问量大时,会占用不少内存
      

  8.   


    直接比session就好了,干嘛要比较IP,如果是内网用户,比IP还有什么意义