Java中深度剖析Http协议

      最近研究java中servlet这部分,看传智播客的韩顺平老师的视频,很有感触,也学到了不少,先总结一下今天碰到的问题。

案例:

现有两个servlet(servlet1,servlet2),在servlet1中创建session,并往session中写入属性,然后在servlet2中读出session的属性。正常情况下,使用同一个浏览器并且在不关闭浏览器的前提下访问servlet1后,然后再访问servlet2,在servlet2中是能够取出在servlet1中存放的session的值的。现在如果关闭了浏览器,再直接去访问servlet2,发现这个时候取不出servlet1中创建的那个session的属性了。我就一直很纠结,因为老师讲的时候,一再强调,session的生命周期跟浏览器是否关闭是没有关系的,但是为什么浏览器关闭后(服务器没有关闭),当再次去访问servlet2的时候,为什么不能取出session中的属性呢???


不知道大家有没有过我上面的那个疑问。后来,韩老师讲解,在访问servlet1的时候,会创建session,服务器会返回创建这个session的id值,详细信息如下:

GET /test1/ForbidCookie HTTP/1.1
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0E; .NET4.0C)
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=198CF8F591F240D010D82B88F6D2AA9B

看到红色字体的那段没有,这就是其中的原因,session和cookie不是孤立存在的,他们是有关系的,上面的那段红色标记的值,不会被存放到浏览器的临时文件夹中,他只是发送的时候发送过去,让服务器再次需要创建session时,以该标记为准,不用重新创建session。

要想当关闭了浏览器后,仍然能够访问到我们曾经创建的session,可以加入这样的语句:

当重新打开浏览器,仍然能够访问到刚刚创建的那个session

Cookie cookie = new Cookie("JSESSIONID",hs.getId());
cookie.setMaxAge(120);
response.addCookie(cookie);

将session id人为的存放到cookie中,作为请求消息发给服务器!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值