jsessionid

简述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。

2)当再次请求的时候(非首次请求),浏览器会在请求头里将cookie发送给服务器(每次请求都是这样)

(JSESSIONID=ghco9xdnaco31gmafukxchph)

不难发现这个的jsessionid和上面的jsessionid是一样的

3)为什么除了首次请求之外每次请求都会发送这个cookie呢(在这里确切地说是发送这个jsessionid)?

事实上当用户访问服务器的时候会为每一个用户开启一个session,浏览器是怎么判断这个session到底是属于哪个用户呢?jsessionid的作用就体现出来了:jsessionid就是用来判断当前用户对应于哪个session。换句话说服务器识别session的方法是通过jsessionid来告诉服务器该客户端的session在内存的什么地方。

事实上jsessionid ==request.getSession().getId()

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值