想获得在线用户信息, 不能用你说的方法. 
我是这样处理的: 用户一登录, 就在数据库中设置为已登录的标志, session无效时, 设置为"退出"标志.  然后通过查询数据库来判断一个用户是否已经登录.

解决方案 »

  1.   

    使用HttpSessionListener事件监听器即可!
         用它监听所有session的上线下线
      

  2.   

    使用HttpSessionListener事件监听器即可,
    当SESSION 注册的时候,把信息放进MAP 或者其他容器,
    当SESSION 失效,删除,取的时候,直接取MAP。。个人建议。。
      

  3.   

    dennisjl(dennis) 得方法好实现,但是统计的可能不会很准
      

  4.   

    dennisjl(dennis)实现的方法有个缺点,就是:如果客户浏览器不是正常途径退出的时候就……
      

  5.   

    我建议保存在application中一个变量。用一个Map来保存,这样你不但可以知道有多少人在线,并且还可以知道此人是谁。
      

  6.   

    又是统计在线用户的,给个例子你。
    大体的思路是:用户列表用HashMap保存,其中key为SessionID,value为Session中设置的username(可以为其他)属性值;当在Session中添加username(可以为其他)属性的时候向用户列表中添加用户;Session失效或者删除Session的username(可以为其他)属性的时候在用户列表中删除该用户。
    可以判断Session失效,但是对特殊情况:如客户端关闭浏览器等没有办法处理
    package com.test;
    import javax.servlet.http.*;
    import java.util.*;
    public class SessionListener implements HttpSessionListener,HttpSessionAttributeListener{
        private static HashMap hUserName = new HashMap();//保存sessionID和username的映射
        /**以下是实现HttpSessionListener中的方法**/
        /*创建session时,什么都不做*/
        public void sessionCreated(HttpSessionEvent se){
        }
        /*session失效时,删除列表中用户信息*/
        public void sessionDestroyed(HttpSessionEvent se){
            hUserName.remove( se.getSession().getId() );
        }
        /**以下是实现HttpSessionAttributeListener中的方法**/
        /*调用session.setAttribute("username","****")时,添加用户信息到列表中*/
        public void attributeAdded(HttpSessionBindingEvent se){
            if(se.getName().equals("username")){
                hUserName.put(se.getSession().getId(),se.getValue());
            } 
        }
        /*调用session.removeAttribute("username","****")时,删除列表中用户信息*/
        public void attributeRemoved(HttpSessionBindingEvent se){
            if(se.getName().equals("username")){
                if(hUserName.containsValue(se.getValue())){
                    Iterator iter = hUserName.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry entry = (Map.Entry)iter.next();
                        Object key = entry.getKey();
                        Object val = entry.getValue();
                        if( ( (String)val ).equals(se.getValue()) ){
                            hUserName.remove(key);
                        }
                    }
                }
            } 
        }
        /*调用更改"username"属性值时同时更改列表中用户信息*/
        public void attributeReplaced(HttpSessionBindingEvent se){
            if(se.getName().equals("username")){
                if(hUserName.containsValue(se.getValue())){
                    Iterator iter = hUserName.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry entry = (Map.Entry)iter.next();
                        Object key = entry.getKey();
                        Object val = entry.getValue();
                        if( ( (String)val ).equals(se.getValue()) ){
                            hUserName.remove(key);
                            hUserName.put(key,se.getValue());
                        }
                    }
                }
            } 
        }
        /*返回用户列表*/
        public static HashMap getList(){
            return hUserName;
        }
    }
    在WEB-INF下面的web.xml中配置监听
        <listener>
            <listener-class>com.test.SessionListener</listener-class>
        </listener>
      

  7.   

    同意minisun2000(天生不专一)楼主的说法。
      

  8.   

    取得所有同时在线用户的信息不是用session,而是用application!