session是什么时候被销毁的?

野生程序猿. 2012-05-05 10:14:02
我在一个servlet中,getSession后并绑定了一个字符串,然后转发到另一jsp并取出显示出来。这一阶段没问题,然后我重新启动了tomcat,这时直接访问jsp页面,奇怪的是竟然也能取到之前绑定的那个字符串!重启服务器后,session不是应该被销毁了么?怎么还可以访问到原先的那个session?!我又试了将数据绑定在ServletContext,然后在jsp中取出,重启tomcat后,如所料的,去取原来绑定的那个数据为null。
这个Session到底是怎么回事?我写了个session监听器,发现第一次访问监听器有反应,之后就算重启了Tomcat也都不再触发到监听器了,就是说不再创建新的Session,浏览器这边的cookie,sessionID也一直是原先那个。
求解释。
...全文
1103 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
昨日凡阳 2012-05-05
  • 打赏
  • 举报
回复
有可能浏览器中cookie记录了,你要清cookie
无可救药 2012-05-05
  • 打赏
  • 举报
回复
和Tomcat的配置有关系:tomcat/conf/context.xml配置中:
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
每次关闭tomcat的时候,都会将当前每个Session中的内容写到文件中,然后重新启动Tomcat的时候读取这个文件,并且验证Session是否超时。。然后,发挥你的想象力吧。 取消注释就ok了。
b11ght 2012-05-05
  • 打赏
  • 举报
回复
session没有销毁是因为当你关闭tomcat的时候,tomcat会默认把当前session序列化到work目录下,生成一个session.ser的文件备份一下,当你再启动的时候,通过读取这个文件在恢复你之前启动时的session状态,所以当你再次访问的时候还有当初你设置的对象。
haohao_xuexi6 2012-05-05
  • 打赏
  • 举报
回复
我查到的资料希望对楼主有点帮助


要知道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="" /> .
野生程序猿. 2012-05-05
  • 打赏
  • 举报
回复
对啊,servletContext是没问题,关键是Session为什么在重启tomcat的情况下还没有销毁,使用原先的sessionID还能找到?[Quote=引用 3 楼 的回复:]

这个跟session的生命周期有关,当你关闭浏览器后再重启,session将不会是同一个,就不会有你讲述的那个现象了,而楼主讲的那个绑定在servletContext上的情况,当关闭容器组件时,servlet实例已被销毁,servlet已经不复存在了,所以会得到null值。
[/Quote]
haohao_xuexi6 2012-05-05
  • 打赏
  • 举报
回复
这个跟session的生命周期有关,当你关闭浏览器后再重启,session将不会是同一个,就不会有你讲述的那个现象了,而楼主讲的那个绑定在servletContext上的情况,当关闭容器组件时,servlet实例已被销毁,servlet已经不复存在了,所以会得到null值。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧