Tomcat源码阅读之Cookie和Session

Http协议是一种无状态协的请求/响应协议。服务器处理来自客户端的请求,然后向客户端回送一条响应。Web服务器几乎没有什么信息可以用来判断是哪个客户端发送的请求,也无法记录来访客户端的请求序列。
Cookie的作用就是识别不同的客户端,实现持久会话。Cookie的基本思想就是让浏览器持有一组服务器特有的信息,每次访问服务器时都将这些信息提供给它。
接下来我们看看Cookie是如何工作的。客户端第一次访问Tomcat服务器的时候,服务器会解析Http的请求头,由于是第一次访问,所以请求头中并没有能识别该客户端的信息,Cookie中没有任何值。服务器第返回响应信息给客户端的时候会通过Set-Cookie或Set-Cookie2将Cookie的值添加到Http协议的头部中。Cookie的值可以是任何信息,通常只包含一个服务器为了进行跟踪而而产生的独特识别码,这个识别码就是JSESSIONID。但Cookie并不仅限于JSESSIONID,还可以以键/值对的方式保存其他信息。
Cookie可以让服务器跟踪每个客户端的访问,以区别不同的客户端,但是每次客户端的访问都必须传回这些Cookie,如果Cookie很多,这无形的增加了增加了客户端和服务器的数据传输量,Session的出现正是解决这个问题。
同一个客户端和服务器交互时,不需要每次都传回所有的Cookie值,只需传回一个ID,而这个ID就是客户端第一次访问服务器时产生的,并且对于每个客户端都是唯一的。这样客户端就只需传回这个唯一的ID就行了。这个ID就是上文中提到的JSESSIONID。
那么我们来看看Tomcat中关于Cookie和Session的这部分源码。
Cookie的值是保存在Http请求头中的,因此Tomcat接收到Http请求之后会调用InternalInputBuffer类的parseHeaders解析请求头,
由于是第一次访问,解析出来的Cookie值为空,因此Tomcat在返回响应信息的时候会创建Session对象和SessionId,并且将SessionId和Session对象一一关联起来,这样下次请求的时候就可以根据SessionId直接获取Session对象,而不用再次创建Session对象了。创建Session的过程在ManagerBase类的createSession方法中。创建好Session对象之后接着创建Cookie对象,并将Cookie对象的name设置为JSESSIONID,value设置为SessionId对应的值。最后调用Response的addSessionCookieInternal方法将Cookie组装成键/值对,并添加到响应头中返回给客户端。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值