什么是Cookie

HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

Cookie机制

客户端发送一个请求到服务器 —> 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部 —> 客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部 —> 服务器返回响应数据

修改或删除Cookie

HttpServletResponse提供的Cookie操作只有一个addCookie(Cookie cookie),所以想要修改Cookie只能使用一个同名的Cookie来覆盖原先的Cookie。如果要删除某个Cookie,则只需要新建一个同名的Cookie,并将maxAge设置为0,并覆盖原来的Cookie即可。

生命周期

创建

客户端向服务器发送请求,服务器返回一个响应,众多响应头中就包含一个 Set-Cookie用于设置cookie 。

过期

生命周期涉及两个属性: ExpiresMax-Age ,当两者同时存在时, Expires 的优先级更高。

如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。

这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。

如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

Domain

Domain 属性指定允许哪些主机接收 cookie。如:cookie设置了 Domain: example.com ,则访问example.com时,request header会携带该cookie。
如果Domain设置了值,该值的子域名也被包含在内。举个例子,如果设置了 Domain=mozilla.org,则 该cookie 可用于 developer.mozilla.org 等子域;但如果设置了 Domain=developer.mozilla.org ,该cookie不能被上级域 mozilla.org 所访问。

推荐阅读

深入理解Cookie
https://blog.csdn.net/playboyanta123/article/details/79464684