最近发现一直在运行的应用程序session异常的多,于是用一个jsp页面把当前应用程序的所有session都显示出来,把创建时间和最后访问时间也显示出来,结果发现最后访问时间都已经是几天前的了,session却还有效(我设置的session有效期是10分钟的)。请问是否有人遇到过这个问题?我用的环境是Tomcat Version: Apache Tomcat/5.5.12,JVM: 1.5.0_02-b09 ,Mysql 4.1,linux OS

解决方案 »

  1.   

    session
      是不是保存到硬盘了<Manager className="org.apache.catalina.session.PersistentManager"
      debug="0"
      saveOnRestart="false"
      maxActiveSessions="-1"
      minIdleSwap="-1"
      maxIdleSwap="-1"
      maxIdleBackup="-1">
        <Store className="org.apache.catalina.session.FileStore"/>
    </Manager>
    看看你的server.xml 有没有这样的设置 Manager 
      

  2.   

    弱弱的问个问题,怎么样“用一个jsp页面把当前应用程序的所有session都显示出来”?
      

  3.   

    答interpb(曾曾胡) :server.xml中没有这个东西。
    答bonwei(阿邦) :用SessionListener监听session事件,保存在list里面,jsp页面再取出来
      

  4.   

    呵呵 那你把那一段加上 试试 这是Tomcat关于session管理的一些设置具体的细节你可以看看文档
      

  5.   

    在判断过期的代码里加上让session失效的代码试试
      

  6.   

    答interpb(曾曾胡)、rickyelf(elf) :我相信是可以用一些技巧来解决这个问题,譬如定期检查session的状态。不过我是想找到出现异常的原因。
      

  7.   

    看看web.xml中session设置呢?不会是哪个变态在程序设了个无限超时吧哈哈~~
      

  8.   

    居然好像又正常了,真郁闷……跑应用程序的那台服务器原来同时也被用作proxy,访问人数比较多,于是对proxy进行了连接限制。这段时间我只对服务器做过这件事,难道跟tomcat服务器也有关系?困惑中……
      

  9.   

    如果getLastAccessedTime() 是几天之前,并且MaxInactiveInterval不是-1,那么你是怎么判断session是失效的呢,是可以setAttribute么?如果jvm没有执行垃圾回收,session所占的内存是不被回收的,可能现在执行了垃圾回收.一般开发程序还是尽量少使用session,如果实在没有办法使用了session,最好能够尽量在程序中(比如模块跳转)把session进行invalidate操作,而不要依靠web服务器自己定时去进行session的invalidate(除非出现用户自己把browser关闭的情况).这样既能最大可能避免你所说的情况,又能提高性能.