最近做一个论坛,我就在考虑在线用户的显示功能是怎么设计的,我的思路如下;    户登录时将他的IP(或用户名)和[当时时间]   存入数据库   ->无论用户访问哪个页面,都更新他的访问时间,当然也可以将他的访问地址存入,便可以得到他的所在位置了,被动退出:同样当用户登录时,用当前时间段与所有在线用户的最后更新时间做比较,超过预设的时间,就删掉这个用户,表示不在线。    不知道这样设计合理不,请大家给点思路谢谢;

解决方案 »

  1.   

    如果只是为了显示,存储在数据库中是不太好的,会造成数据库的频繁写操作。简单的保存在cache中会比较好一些,每当用户进行一个操作时,就更新cache。cache的过期策略也会帮你处理长时间不操作或非正常退出的情况。
      

  2.   

    我觉得思路是没错的,不过每次访问页面,都刷新数据库的话。。
    效率不是很好哦。登录是好做。如果用户推出呢,怎样把当前的在线用户删除呢?个人觉得session 比较好。
      

  3.   

    用户登录成功后信息放到一个Map<Key, Value)里;
    在用户信息DTO里写方法
    public boolean isOnline()
    {
        return getMap.containsKey(userId);
    }
      

  4.   

    配置一个session监听器,如果session销毁的话,将Map<userId, UserDTO>里的用户信息删除掉。就OK了.
      

  5.   


    存放在session中,在用户注销或退出系统时。再把session中的值存入数据库。