Cookie
2018-03-20 本文已影响2人
一块大番薯
HTTP 协议是无状态的,目的是减少 CPU 内存消耗,让 HTTP 协议尽可能简单,能够处理大量事务。
HTTP/1.1 引入 Cookie 来保存状态信息。
Cookie 是服务器发送给客户端的数据,该数据会被保存在浏览器中。
在下一次发送请求时,通过 Cookie 让服务器识别出客户端,从而实现保持登录状态等功能。
1. 创建过程
服务器响应报文包含 Set-Cookie 字段,客户端解析为 Cookie 保存到浏览器。
客户端下次请求时,请求报文中包含 Cookie 字段。
注:
Cookie,Set-Cookie 和 Content-Disposition 等是RFC中定义的首部字段;
而请求,响应,通用,实体字段是 HTTP/1.1 首部字段。
2. Set-Cookie 值
属性 | 说明 |
---|---|
name=值 | 赋予 Cookie 的名称和其值(必需项) |
expires=日期 | Cookie 的有效期(若不明确指定则默认为浏览器关闭前为止) |
domain=域名 | 作为 Cookie 适用对象的域名(若不指定则默认为创建 Cookie 的服务器的域名) |
path=路径 | 将服务器上的文件目录作为 Cookie 的适用对象(若不指定则默认为文档所在的文件目录) |
Secure | 仅在 HTTPS 安全通信时才会发送 Cookie |
HttpOnly | 加以限制,使 Cookie 不能被 JavaScript 脚本访问 |
3. Session 与 Cookie
Session 存在于服务器,Cookie 存在于客户端。
每个 Session 有一个 Session ID,用来唯一标识服务器上的某个 Session。
Cookie 中有一个键值对——「sid: Session ID」。
4. 浏览器禁用 Cookie
对 URL 进行重写,在 URL 后面加上 sid=xxx 。
5. 实现用户名和密码的自动填写
网站脚本从浏览器中的 Cookie 读取用户名和密码,从而实现自动填写。