各位高手们 本人现在有个特别棘手的问题 需要各位高手帮忙  就是当点击关闭浏览器后 让其他用户的页面刷新也可以看到该用户已退出该系统  并将该状态该为离线。
能附上代码 更好 谢谢。

解决方案 »

  1.   

    即时性好的话 就用socket  采用多线程的方式  将与该人关联的好友存在一个集合里 当他下线时 发送给当前集合中的用户每个人一个信息  不要求即时性的话 可以重写session拦截器  当session失效时发给指定用户一些信息
      

  2.   

    我想可以这样,当session被释放的时候,更新当前用户的在线状态,当前其它用户刷新后,可以看到该用户已退出该系统
      

  3.   

    用长连接 推技术 (polling)
      

  4.   


    关闭浏览器服务器应该不能确定用户已退出话,也只能等session过期才能确定用户已经断开连接。
    除非用户点击退出系统,然后后台作处理才能实时更新状态
    对于浏览器异常关闭,只能等session过期,然后写个监听器,当session过期时做一些操作,
    下面这个是我以前毕业设计里写的监听器
    package com.hisoft.util;import javax.servlet.http.HttpSessionAttributeListener;
    import javax.servlet.http.HttpSessionBindingEvent;import com.hisoft.action.UserAction;
    import com.hisoft.model.User;public class MyListener implements HttpSessionAttributeListener {
    public void attributeAdded(HttpSessionBindingEvent se) {
    if ("user".equals(se.getName())) {
    UserAction.count++;
    User user = (User) se.getValue();
    System.out.println(user.getName() + " has login");
    UserAction.onLineUser.add(user.getName());
    System.out.println(UserAction.onLineUser.size());
    }
    } public void attributeRemoved(HttpSessionBindingEvent se) {
    // TODO Auto-generated method stub
    if ("user".equals(se.getName())) {
    User user = (User) se.getValue();
    System.out.println(user.getName() + " has logout");
    UserAction.onLineUser.remove(user.getName());
    System.out.println(UserAction.onLineUser.size());
    UserAction.count--;
    }
    } public void attributeReplaced(HttpSessionBindingEvent se) {
    // TODO Auto-generated method stub }}
      

  5.   

    一般的解决办法是,首先增加退出登录的功能,这样用户点击退出登录后,其他用户就可以看到该用户为离线,其次,增加session监控,如果用户直接关闭浏览器,在session失效后,其他用户可以看到该用户为离线状态