最好的办法是使用HttpSessionListener监听器,在sessionCreated方法里面将计数器加1,在
sessionDestroyed里减1

解决方案 »

  1.   

    import javax.servlet.http.HttpSessionListener;
    import javax.servlet.http.HttpSessionEvent;
    /**
     *
     * @author  Denny
     */
    public class MySession implements HttpSessionListener 
    {
        
      public MySession()
      {}      private static int activeSessions = 0;
          
          public void sessionCreated(HttpSessionEvent se)
          {
            activeSessions++;
            System.out.println("Created: " + se.getSession().getId()+ " : " +  new java.util.Date(se.getSession().getCreationTime()));
            System.out.println("Created: " + activeSessions);
          }
          
          public void sessionDestroyed(HttpSessionEvent se)
          {
            System.out.println("Destroyed: " + se.getSession().getId()+ " : " +  new java.util.Date(se.getSession().getCreationTime()));
            System.out.println("Destroyed: " + activeSessions);
            if (activeSessions > 0 )
                activeSessions--;
          }
          
          public static int getActiveSessions()
      { 
      return activeSessions;
      }
    }我模仿写了这个程序,我该怎么用它呢?当javabean嘛?需要放在首页面?还需要其他配置吗?
      

  2.   

    sessionDestroyed(...)不能在关闭窗口时把session注销,但可自然注销(系统设定的时间),所以这个方法不行啊,不准确。有没有能准确统计在线人数的好方法啊?
    解决了多多送分。
    高手指教...
      

  3.   

    当javabean用,需要在web.xml文件丽配一下:
    <listener>
        <listener-class>MySession</listener-class>
      </listener>
     然后再jsp里调用getActiveSessions方法。有没有能准确统计在线人数的好方法啊?
    据我所知,好像没有,你看一下jsp做的论坛,都不是你一关浏览器救注销的,你关了后马上在打开时,你还是在线,如果你要准确一点的,我可以教你一个笨办法,在数据库在线表里加上个字段,在线时间,在每个页面都加上如下判断:
    1、对于请求该页面的用户,更新在线时间为当前时间。
    2、对于其他用户,比较在线时间和当前时间,如果差值大于某个值,比如1分钟,将该用户从在线表中删除。
      

  4.   

    用一个application,然后累加session,每次session失效或退出系统是减掉application中相应的session就行了