今天看飞思科技,孙卫琴编著的Tomcat与Java Web开发技术详解。
其中107页关于Session生命周期的问题,
书中讲:
以下情况,Session结束生命周期,Servlet容器将Session所占资源释放:
1.客户端关闭浏览器
2.Session过期
3.服务器端调用了HttpSession的invalidate()方法。对第一条不能理解!
因为按我的理解本身http协议是无状态的,服务器端根本不能确定客户端什么时候关闭的浏览器!怎么释放?我觉得就算客户端关闭了浏览器,服务器端也是要等到Session过期才会释放吧?!!请明白人给解释一下!谢谢

解决方案 »

  1.   

    我觉得就算客户端关闭了浏览器,服务器端也是要等到Session过期才会释放吧?!!你的理解正确。“客户端关闭浏览器”与“Session过期”既非充分又非必要。
      

  2.   

    楼主聪明啊!
    你说的没错啊
    关闭浏览器并没有马上过期.
    过期的关键是 服务器端调用了HttpSession的invalidate()方法。当时关闭浏览器后,服务器一般会马上调用这个方法。人家孙mm说得也没错啊。
    Servlet容器将Session所占资源释放。她是说将,而不是说立刻!楼主读书真仔细!
      

  3.   

    回复人:ttaallkk1(小昊) ( 二级(初级)) 信誉:100  2006-06-13 17:31:00  得分:0

    楼主聪明啊!
    你说的没错啊
    关闭浏览器并没有马上过期.
    过期的关键是 服务器端调用了HttpSession的invalidate()方法。当时关闭浏览器后,服务器一般会马上调用这个方法。
    ~~~~~~~~~~~~~~~~~~~~~~~~人家孙mm说得也没错啊。
    Servlet容器将Session所占资源释放。她是说将,而不是说立刻!楼主读书真仔细!=====关键是服务器如何知道用户关闭了浏览器
      

  4.   

    我当时读到这的感觉是客户端关闭浏览器后也不是马上就释放session,而是等一段时间而这段时间刚好可以达到让session过期,从而达到释放的目的,不然为什么还要有那个invalidate()方法,直接关浏览器不就完了
      

  5.   

    session其实就是一个特殊的cookie,
    打开了浏览器后,
    这个特殊的cookie就会保存在web服务器的硬盘上
    并且浏览器和服务器一直在进行间断性的http通信,
    当服务器侦测到浏览器关闭后
    服务器端调用了HttpSession的invalidate()方法,
    并且删除硬盘上的cookie。
    有的不删除,为什么你重新登陆一个web网站,她知道你的个人爱好,因为她还保存你的cookie。
      

  6.   

    我想问问,Session的生命周期是从创建时算起还是从最后一次使用算起阿。
      

  7.   

    客户端请求获得session一直保存在网页的内存中的已关闭ie就是释放掉那些session的信息!
    当Request。getSession()服务器会重新分配session