我在一个servlet中,getSession后并绑定了一个字符串,然后转发到另一jsp并取出显示出来。这一阶段没问题,然后我重新启动了tomcat,这时直接访问jsp页面,奇怪的是竟然也能取到之前绑定的那个字符串!重启服务器后,session不是应该被销毁了么?怎么还可以访问到原先的那个session?!我又试了将数据绑定在ServletContext,然后在jsp中取出,重启tomcat后,如所料的,去取原来绑定的那个数据为null。
这个Session到底是怎么回事?我写了个session监听器,发现第一次访问监听器有反应,之后就算重启了Tomcat也都不再触发到监听器了,就是说不再创建新的Session,浏览器这边的cookie,sessionID也一直是原先那个。
求解释。
这个Session到底是怎么回事?我写了个session监听器,发现第一次访问监听器有反应,之后就算重启了Tomcat也都不再触发到监听器了,就是说不再创建新的Session,浏览器这边的cookie,sessionID也一直是原先那个。
求解释。
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
每次关闭tomcat的时候,都会将当前每个Session中的内容写到文件中,然后重新启动Tomcat的时候读取这个文件,并且验证Session是否超时。。然后,发挥你的想象力吧。 取消注释就ok了。
要知道session 原理以及生命周期
1:session 是通过浏览器的cookie来保存一个jessionid的信息 。这个jsessionid里面包含着你session 的id 。正是通过这个jessionid浏览器才能判断是不同用户的session ,用户每次进行session.getAttribute()或则 session.setAttribute时候。都会取出jesseionid里面的信息和session id比较。来区分不通的session。
2.session 的生命周期是一次会话。就是从用户开始请求这个application开始到application结束。 你停止了服务当然这个应用也就结束。tomcate容器出清除session一般情况下,session都是存储在内存里,当服务器进程被停止或者重启的时候,内存里的session也会被清空,如果设置了session的持久化特性,服务器就会把session保存 到硬盘上。
你可以设置session的持久化特性试试看,当服务器进程重新启动或这些信息将能够被再次使用。
tomcat 正常关闭或者 restart 的话 tomcat 会在 work 的这个工程目录下有个 session.ser 文件,会保存在那里,重启时会重新加载。默认的Tomcat是支持Session持久化的。当然,取消注释也就取消了这个功能。
conf/context.xml:
<Manager pathname="" /> .