最近写了一个HttpSessionListener,有人访问时,能自动调用sessionCreated,
可是session过期时,sessionDestroyed不被调用,为什么呢?!我用的是TOMCAT4

解决方案 »

  1.   

    既然创建session的时候能监听到,而销毁的时候没有监听,应该是你的httpSessionListener实现类有问题,请把代码贴出来看看
      

  2.   

    package listener;import java.util.Vector;import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;public class OnlineListener implements HttpSessionListener {
    private int count=0;
    public void sessionCreated(HttpSessionEvent se) {
    // TODO Auto-generated method stub
    count++;
    se.getSession().getServletContext().setAttribute("onlineCount",new Integer(count));
    System.out.println("add");
    } public void sessionDestroyed(HttpSessionEvent se) {
    // TODO Auto-generated method stub
    count--;
    String name = (String)se.getSession().getAttribute("name");
    se.getSession().removeAttribute("name");
    System.out.println(name);
    Vector v = (Vector)se.getSession().getServletContext().getAttribute("namelist");
    for(int i=0;i<v.size();i++)
    {
    String n = (String)v.elementAt(i);
    if(name.equals(n))
    {
    v.remove(i);
    }
    }
    se.getSession().getServletContext().setAttribute("onlineCount",new Integer(count));
    System.out.println("remove"+"  "+name);
    }
    }
      

  3.   

    1。检查一下web.xml配置是否正确
    2。看一下session过期时间是否设置了
    3。最好能debug看一下session创建和过期时listener是否正常执行了~
      

  4.   

    这个监听器在TOMCAT5可以用,但在TOMCAT4就调用不了sessionDestroyed了!
      

  5.   

    或许可以把web.xml上的session的生命周期设置的长一些,
      

  6.   

    是不是没有完全捕获事件,你写个强制释放session的东西测试一下看看,先不要直接关浏览器,