session一般都是這樣用來保存用戶個人信息的.
如果用戶直接關閉瀏覽器,服務器是無法知道的,當會話超時(一般為30分鐘)會產生HttpSessionBindingEvent,使用public void valueBound(HttpSessionBindingEvent e)來捕獲此事件

解决方案 »

  1.   

    sorry 創建時的方法是public void valueBound(HttpSessionBindingEvent e)
    銷毀時的是public void valueUnbound(HttpSessionBindingEvent e)
      

  2.   

    利用HttpSessionListener统计在线人数转自JSPCHINAJSP显示在线人数代码 /** 
    * 编写以下SessionCounter.java 
    * 并编译为SessiionCounter.class 
    * 然后放到你的网站的classpath的 
    * SessionCount(自己建立此目录)下面 
    */ package SessionCount; import javax.servlet.*; import javax.servlet.http.*; public class SessionCounter implements HttpSessionListener { private static int activeSessions = 0; public void sessionCreated(HttpSessionEvent se) { activeSessions++; } public void sessionDestroyed(HttpSessionEvent se) { if(activeSessions > 0) activeSessions--; } public static int getActiveSessions() { return activeSessions; } } 接着建立online.jsp文件用于显示在线人数 在线: 然后需要在你的网站的WEB-INF中建立web.xml 
    文件内容如下: <!-- Web.xml --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2.3.dtd"> <web-app> <!-- Listeners --> <listener> <listener-class> SessionCount.SessionCounter </listener-class> </listener> </web-app> 然后重新启动你的应用服务器,访问online.jsp检查是否显示正确。 你的问题和这个大同小异,原理相同,应用的是不同的监听器而已。欢迎到www.javaresearch,org看看。
      

  3.   

    楼主可以在session中放入一个类的object来支持这些事件,比如论坛的问题,当某人登陆的时候,他session中的这个object的状态改变,该object的
      

  4.   

    listener可以听到这些事件。但好像实际中没有多少人这样用的。
      

  5.   

    可以放在一个全局变量中。如
    class A {
       static int i =0; 
    }进行记数。
    但是不能做到离开时去掉,因为session的异常销毁。