Cookie原理
Cookie的实现是基于HTTP协议的
- 响应头: set-cookie
- 请求头 : cookie
Cookie原理图解:

- 开始的时候先由客户端浏览器向服务器端发送请求1, 然后ServletA接收到来自客户端浏览器的请求之后在服务器端ServletA中创建了一个Cookie对象, 并且通过Response对象调用addCookie()方法将此Cookie对象发送到了客户端浏览器中
- 那么这个时候我们通过Response对象将Cookie对象发送到客户端其实是通过一个set-cookie响应头实现的, 其实就是将我们的set-cookie响应头设置为了我们的Cookie对象中存储的键值对数据, 所以其实我们调用Response对象的addCoookie()方法其实是将我们的set-cookie的响应头设置为对应的参数Cookie对象的数据值
- 然后我们的客户端浏览器拿到了服务器的响应数据之后就会进行一个解析, 当解析到set-cookie请求头之后就会在服务端内存中创建一个Cookie对象并将这个Cookie对象保存到客户端浏览器中,Cookie对象中的内容就是set-cookie响应头中的数据
- 这个时候默认情况之下我们都是将响应回来的Cookie数据存储到客户端浏览器的内存中的, 但是我们可以通过设置讲我们的Cookie数据存储到客户端对应的本地内存中
- 之后我们的客户单浏览器又向服务端中的ServletB发送了一个请求, 这个时候我们请求的时候就会携带所有的服务器所在域名之下的Cookie对象数据
- 这里我们的Cookie对象是通过HTTP的方式来进行传输的, 所以响应的时候是通过set-cookie响应头响应回来的, 这个时候请求其实我们也可以猜到, 肯定也是使用一个请求头来传输的Cookie数据, 我们将所有的服务器域名之下的Cookie对象的内容全部都放到了一个名为cookie的请求头中的数值部分, 每个Cookie对象的数据之间使用封号(;)进行了一个分割
- 之后我们的ServletB中接收到了这个请求之后就可以通过request对象调用getCookies()方法获取到对应的cookie请求头中的数据, 并将这些数据使用(封号)拆分成多个Cookie数据键值对之后封装成为多个Cookie对象, 最终放到一个Cookie数组中返回, 然后我们就可以通过这个Cookie[]中的一个一个的Cookie对象调用getName()和getValue()方法来获取对应的会话中的共享数据了
注意: Cookie对象只是Cookie对象, 我们真正的客户端浏览器和服务器交互的时候是通过cookie请求头和set-cookie响应头实现的Cookie对象的传输
补充:
只有在对应本次访问的Servlet中创建Cookie对象之后这次响应中才会有set-cookie响应头