httpsession理解

SESSIONID cookie是在创建会话时创建/发送的。 会话是在您的代码首次调用request.getSession()或request.getSession(true)时创建的。 如果你只是想获得会话,但不创建它,如果它不存在,使用request.getSession(false) – 这将返回一个会话或null 。 在这种情况下,不会创建新的会话,并且不发送JSESSIONID cookie。 (这也意味着会话不一定是在首次请求时创建的 …… 当会话被创建时 ,您和您的代码在控制之中)

针对上面这段话,有几个关键点需要理解

1、session是什么

Session是每次浏览器与服务器建立的一个连接,一般情况在浏览器新添加一个tab页并访问相同网站,sessionid是不会变的,需要注意的是,sessionid仅仅能表示浏览器与服务器有了连接,至于访问的人是谁,也就是身份认证,这不是它的职责。

2、什么时候建立Session

从上面的文章可以看出来,会话是在您的代码首次调用request.getSession()或request.getSession(true)时创建的。

测试准备:
1、用chrome测试,从network里看总有一个favicon.ico的申请,它会调用相同的servlet,查看请求、响应报文的时候会产生干扰,干脆先屏蔽掉。《禁止favicon.ico请求》,可以参考这篇文章在每个响应页面中添加响应内容。

2、先清空一下cookie的缓存

测试一:
在doGet()中添加,req.getSession(),请求的header中是不会存在JSessionID这个cookie的,而响应的头中会出现set-cookie:JSESSIONID=XXXX信息,再次访问服务器,请求头会自动带着cookie:JSESSIONID信息,而返回头将不会带set-cookie:JSESSIONID=XXXX信息了。《请求与响应过程》,这篇文章有想过的截图。

测试二:不清空cookie缓存
如果不清空cookie缓存,重起服务器,请求头仍会带着上次的jsessionid信息,所以再次证明sessionid是保存在浏览器端端,如果关闭浏览器后重新访问(或者用一个新的浏览器),会返回到测试一的情景,因为是一个新的连接。

测试三:给session添加一个超时时间
如果访问一次后,不再进行访问,当超过设置的时间后,再次访问服务器会认为这是一个新的连接,虽然此时请求仍旧带着之前给的sessionid,但是服务器会重新分法一个新的。如果不停的访问服务器,是不会超时的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值