1.什么是cookie?
HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
打个比方,我们去银行办理储蓄业务,第一次给你办了张银行卡,里面存放了身份证、密码、手机等个人信息。当你下次再来这个银行时,银行机器能识别你的卡,从而能够直接办理业务。
2.机制:
当用户第一次访问并登陆一个网站的时候,cookie的设置以及发送会经历以下4个步骤:
客户端发送一个请求到服务器
服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部
客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部
服务器返回响应数据
3:属性:
NAME=VALUE键值对,可以设置要保存的 Key/Value,注意这里的 NAME 不能和其他属性项的名字一样
Expires过期时间,在设置的某个时间点后该 Cookie 就会失效
Domain生成该 Cookie 的域名,如 domain="www.baidu.com"
Path该 Cookie 是在当前的哪个路径下生成的,如 path=/wp-admin/
Secure如果设置了这个属性,那么只会在 SSH 连接时才会回传该 Cookie
4.cookied使用:
cookie 是由服务端创建的,由浏览器端保存的。所以创建对象我们应该在服务端创建 cookie,cookie 的创建方法:
(1):
创建一个 CookieServlet
在 Servlet 的 doPost()方法中编写如下代码:
(2):
在浏览器中访问该 Servlet,会发现响应头中出现如下内容: Set-Cookie: username=zhangsan
如此就成功的向浏览器设置了一个 Cookie,当我们在刷新页面时会发现浏览器的请求头中出现如下代码:
Cookie: username=zhangsan
(3):同样我们还可以同时设置多个 Cookie:
浏览器会按以下形式发送 Cookie:
Cookie: username=zhangsan; password=123456; age=20
5.读取cookie:
cookie 被设置进入浏览器后,每次请求都会携带 cookie 的值,所以我们需要从 request 中取出 cookie 进行解析。