Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。

首先谈一下对session对象在web开发中的创建以及sessionId生成并返回客户端的运行机制

session对象当客户端首次访问时,创建一个新的session对象,并同时生成一个sessionid,并对次响应中将sessionid以响应报文的方式显回客户端浏览器内存或以重写url方式送回客户端,来保证整个会话,只要sever端的这个session对象没有销毁,以后带哦用request.getSession()时就直接根据客户端的sessionid来检索server端生成的session对象并返回,不会再次去新建,除非根据此sessionid没有检索到session对象。

下面是在IE下测试,因为IE6的一个BUG就是IE的隐私何止即使是阻止所以的cookie时,也是会以对话cookie来保存sessionid。所以下面都是以会话cookie来讨论的。

  1. 在server没有关闭,并在session对象销毁时间内,当客户端再次请求server端的servlet或jsp时,会把第一次请求时生成的sessionid附带在请求信息头中并向server端发送,server端接受到sessionid后根据此session会去搜索(此过程是透明的)server对应的session对象并直接返回这个session对象,此时不会重新去建立一个新的session对象。
    在这里插入图片描述浏览器会根据响应头的set-cookie信息设置浏览器的cookie并保存。
    在这里插入图片描述

  2. 当server关闭(之前生产的session对象也就消亡了),或session对象过了其销毁时间后,浏览器窗口不关,并在本浏览器窗口再次去请求server端的servlet和jsp时,此时同样会将sessionid(server关闭或session销毁时生成的sessionid)发送到server端,server根据sessionid去找其他对应的session对象,但此时session对象已经不存在,此时会重新生成一个新的session对象。并生成新的session对象,并生成新的sessionid以响应报文的形式送到浏览器内存中。

  3. 当server没有关闭,并session对象在其销毁时间内,当请求一个jsp页面回客户端后,关闭此浏览器窗口,此时其内存中的sessionid也就随之销毁,在重新请求server端的servlet或jsp时,会重新生成一个sessionid给客户端浏览器,并存在浏览器内存中。

总结,jsessionid的工作流程可以简单用下面的图表示:

在这里插入图片描述

原文:https://www.php.cn/java-article-419440.html
https://blog.csdn.net/tanga842428/article/details/78600940

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐