JAVAEE_Servlet_25_HttpSession原理(二)

HttpSession对象销毁机制

  • 与 HttpSession所关联的Cookie对象的name是比较特殊的叫作 JSESSIONID,当服务器看到name为JSESSIONID的Cookie对象时,就知道是要取出该Cookie对象的value值,并且去服务器的Session对象列表中检索与该值相对应的
    Session对象

  • 如果客户端浏览器禁用Cookie的情况下,Session会怎样?

    • 浏览器禁用Cooike后,则客户端浏览器缓存中将不再保存Cookie对象,会导致在同一次会话中无法获取到对应的Session对象。

    • 但是服务器端还是会继续向客户端浏览器发送 JSESSIONID Cookie,但因为客户端禁用了Cookie,所以并没有在浏览器缓存中保存该Cookie对象,那么浏览器端,每向服务器端发送一次请求,服务器端都会生成一个新的
      Session对象。

  • 浏览器禁用Cookie之后,若还想拿到对应的Session对象,应该怎么办?

    • 必须使用URL重写机制, 重写URL机制换别的浏览器也能访问同一个Session对象。
- 怎么重写?  
          
   在浏览器地址栏中的URL后面加: ;jsessionid=jsessionid内容 (把服务器发过来的Cookie中的Cookie-value的值复制,写在URL后边)

       例如 : https://www.baidu.com/;jsessionid=D3E9985BAC74858DSAD25
  • 浏览器关闭后,服务器端对应的Session对象会被销毁吗?

    • 浏览器关闭之后,服务器不会销毁与之对应的Session对象。

    • Http协议是一种无连接无状态的协议,无连接、无状态的意思是:请求的瞬间浏览器和服务器之间的通道打开,浏览器和服务器连接在一起,但请求响应结束后通道立即关闭,这样做的目的是降低服务器的压力。

    • 因为B/S架构基于HTTP协议,而HTTP协议是一种无连接,无状态的协议,浏览器是否关闭,服务器是不知道的。

  • HttpSession对象在什么时候被销毁?

    • Web系统中引入了Session超时的概念,当很长一段时间(时间可以配置),没有用户访问某个Session对象,此时Session对象超时,Web系统自动回收Session对象。

    • 超时时间配置方法: 在web.xml文件中配置该参数, 不配置该参数的话,默认30分钟无访问销毁Session。

      120 表示如果一个Session对象两个小时(120分钟)都没有被访问,那么服务器销毁该Session对象。
  • 什么叫做一次会话?

    • 一般情况下用户打开浏览器访问一次网站,发送多个请求,直到浏览器关闭代表一次会话。(因为浏览器关闭存储在浏览器缓存中的 JSESSIONID Cookie对象就失效了)

    • 本质上是指从Session对象被服务器创建 到 Session被服务器销毁是一次会话.(因为浏览器关闭以后虽然浏览器缓存中的 JSESSIONID Cookie对象失效了,但是服务器端并没有销毁该Session对象,如果使用重写URL的方式还是可以访问该Session对象的)
      直到该Session对象超时,服务器自动销毁该对象,算是一次会话。

posted @ 2021-04-24 14:22  失昼  阅读(62)  评论(0)    收藏  举报