简述jsessionid:
做web开发的同学都知道,http是无状态的会话协议,也就是说无法保存用户的信息。那如果有一些信息需要在用户的浏览活动中一直保持,该怎么做呢?我们可以把这些信息在每次请求的时候作为参数传递给服务器,但这样做既麻烦又耗费资源,这时候就体现出了session的重要性。session是web开发中不可或缺的一个特性。它是对于一个特定的用户请求,在web服务器上保存的一个全局变量。有了它我们就可以把用户的一些信息保存在服务器上,而不用在服务器和客户端之间来回传递。知道了session的作用,那session是怎么实现的呢?服务器上为每个用户都保存了一个session,那当用户请求过来的时候是怎么知道某一个用户应该对应哪个session呢?这时jsessionid就派上用场了。每一个session都有一个id来作为标识,这个id会传到客户端,每次客户端请求都会把这个id传到服务器,服务器根据id来匹配这次请求应该使用哪个session。jsessionid就是客户端用来保存sessionid的变量,主要是针对j2ee实现的web容器,没有研究过其他语言是用什么变量来保存的。一般对于web应用来说,客户端变量都会保存在cookie中,jsessionid也不例外。不过与一般的cookie变量不同,jsessionid是保存在内存cookie中的,在一般的cookie文件中是看不到它的影子的。内存cookie在打开一个浏览器窗口的时候会创建,在关闭这个浏览器窗口的时候也同时销毁。这也就解释了为什么session变量不能跨窗口使用,要跨窗口使用就需要手动把jsessionid保存到cookie里面。
通俗的解释一下,jsessionid的相关过程:
从浏览器进入a.jsp,携带a.jsp的提交数据请求服务器,,
如果是第一次运行,(会在服务器查找jsessionid,如果没找到相应的jsessionid)在浏览器端会开辟一个空间来存放这些数据,这个空间有一个唯一标示符,即为jsessionid,(),所以第一次是没有jsessionid的,(在使用session时记得判断是否为空),
如果是不是第一次运行,就会用浏览器端的jsessionid去服务器端匹配jsessionid,(就可以取得里面的值了),
配上一幅图,希望能更好的理解:
以下为别人的总结,,链接:http://blog.csdn.net/chunqiuwei/article/details/23461995
1)第一次访问服务器的时候,会在响应头里面看到Set-Cookie信息(只有在首次访问服务器的时候才会在响应头中出现该信息)
。
上面的图JSESSIONID=ghco9xdnaco31gmafukxchph;Path=/acr
,
浏览器会根据响应头的set-cookie信息设置浏览器的cookie并保存之
注意此cookie由于没有设置cookie有效日期,所以在关闭浏览器的情况下会丢失掉这个cookie。
(JSESSIONID=ghco9xdnaco31gmafukxchph)
3)为什么除了首次请求之外每次请求都会发送这个cookie呢(在这里确切地说是发送这个jsessionid)?
事实上当用户访问服务器的时候会为每一个用户开启一个session,浏览器是怎么判断这个session到底是属于哪个用户呢?jsessionid的作用就体现出来了:jsessionid就是用来判断当前用户对应于哪个session。换句话说服务器识别session的方法是通过jsessionid来告诉服务器该客户端的session在内存的什么地方。
事实上jsessionid ==request.getSession().getId()
4)总结,jsessionid的工作流程可以简单用下面的图表示: