当用户关掉浏览器或很长时间没有请求过服务器时在服务器上如何查看,操作
(例如:删除30分钟没有请求过服务器的用户所占用的session,
当用户关闭浏览器时,服务器也及时的删除对应的session)。
请各位高手指教一下~~谢谢!!  (^.^)~~

解决方案 »

  1.   

    tomcat 服务器中  
    web.xml
    <!-- ==================== Default Session Configuration ================= -->
      <!-- You can set the default session timeout (in minutes) for all newly   -->
      <!-- created sessions by modifying the value below.                       -->    <session-config>
            <session-timeout>30</session-timeout>
        </session-config>若是其他服务器,类似
      

  2.   

    楼上正确在session里加时间字段,每次请求都经过action修改时间,就可以比较当前时间
      

  3.   

    1楼说的很正确,你只要像1楼那样在你的web.xml中添加
    <session-config> 
        <session-timeout>30</session-timeout> 
    </session-config>
    就OK了,这是tomcat提供的服务,不用你自己刻意去编写代码来实现,也就是说,在用户30分钟内没有在你的网站中做任何动作(没有点击任何连接),那么他的session就会被删除了。至于你说“当用户关闭浏览器时,服务器也及时的删除对应的session”
    这个恐怕很难作到,以现在的技术,好象还无法判断用户是否关闭了浏览器
      

  4.   

    我的数据库中有一张表是保存在线用户的,当一个用户的session被删除时也要删除数据库的这条记录,这怎么实现?
      

  5.   

    够BT的需求session 在 创建 和 被销毁 的时候,都会触发事件
    在这里,你将会使用到一个接口 Interface HttpSessionListener
    她里面有2个方法:
    public void sessionCreated(HttpSessionEvent se)
    public void sessionDestroyed(HttpSessionEvent se)
    分别会在session被创建和销毁的时候调用到,具体你可以baidu J2EE的API文档
      

  6.   

    说实话,偶的API文档也是英文的 - -!
      

  7.   

    ~~~~郁闷
    我在网上找了段代码弄上来你给看下是不
    package demo.listener;import javax.servlet.ServletContext;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;public class SessionCounter implements HttpSessionListener {
        public void sessionCreated(HttpSessionEvent event) {
            ServletContext ctx = event.getSession( ).getServletContext( );
            Integer numSessions = (Integer) ctx.getAttribute("numSessions");
            if (numSessions == null) {
                numSessions = new Integer(1);
            }
            else {
                int count = numSessions.intValue( );
                numSessions = new Integer(count + 1);
            }
            ctx.setAttribute("numSessions", numSessions);
        }
        public void sessionDestroyed(HttpSessionEvent event) {
            ServletContext ctx = event.getSession( ).getServletContext( );
            Integer numSessions = (Integer) ctx.getAttribute("numSessions");
            if (numSessions == null) {
                numSessions = new Integer(0);
            }
            else {
                int count = numSessions.intValue( );
                numSessions = new Integer(count - 1);
            }
            ctx.setAttribute("numSessions", numSessions);
        }
    }在这个解决方案中,任何一个Session被创建或者销毁时,都会通知SessionCounter 这个类,当然通知的原因是必须在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/dtd/web-app_2_3.dtd">
        
    <web-app>
    <display-name>Struts Examples</display-name><listener>
          <listener-class>demo.listener.SessionCounter</listener-class>
    </listener>
    ... rest of web.xml
      

  8.   

    其实很简单的package csdn.jinjin0427import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;public class Test implements HttpSessionListener {
        public synchronized  void sessionCreated(HttpSessionEvent hse) {
            //do nothing
        }     public synchronized void sessionDestroyed(HttpSessionEvent hse) { 
            //这里写代码,操作数据库进行删除记录
        }
    }
    然后再在web.xml里配置一下<listener>
        <listener-class>
          csdn.jinjin0427.Test
        </listener-class>
    </listener>
      

  9.   

    咳咳~~~
       问个比较弱智的问题~~
       在执行sessionDestroyed方法的时候是不是就不能再通过以前在session中放的ID来删除了??
       就是说sessionDestroyed是在session删除后才执行的是么??
       同理sessionCreated方法是不是在session创建之前执行的??还是创建之后执行?
      

  10.   

    应该是先执行 sessionDestroyed()方法,再销毁session
    先创建session,再调用sessionCreated()方法