Cookie详解
Cookie产生的原因
- HTTP协议是无状态协议
- 请求结束后关闭连接
- 单次请求之间独立
Browser
Server
request1
request2
Cookie产生的原因
- 应用是有状态的
- 单点登录(SSO)
- 页面信息应用
Cookie产生的原因
- Cookie的产生
- 1994年Lou Moutulli引入Cookie概念
- 将HTTP请求带上Cookie文本,赋予web记忆
Cookie的交互过程
- 访问page1时server返回请求,告诉浏览器要保存Cookie
- 浏览器接到Cookie进行保存
- 访问page2时带上对应的Cookie
- server根据Cookie获取用户状态
Browser
Server
request1
request2,带上Cookie
response1,设置Cookie
存储Cookie
读取Cookie
Cookie的组成
- name
- value
- expire
- path
- domain
- secure
- HTTPOnly
// 返回头
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT
// 请求头
GET /spec.html HTTP/1.1
Host: www.webryan.net
Cookie: name=value; name2=value2
Accept: */*
Cookie的组成
- name
- Cookie名
- 设置相同名的Cookie会覆盖老的Cookie
- value
- Cookie值
- 传输过程经过了URLEncode
Cookie的组成
- expire
- 过期时间
- 不设置则为单次浏览有效(退出浏览器失效)
- Wdy, DD-Mon-YYYY HH:MM:SS GMT
- 可用Max-Age:seconds替代(HTTP1.1)
Cookie的组成
- domain
- 域名
- 默认为当前域名
- 域名
/*
* 1. 设置cookie到site1.web.com上
* url: site1.web.com
*/
Cookie cookie = new Cookie("test_key", "test_value");
cookie.setDomain("site1.web.com");
response.addCookie(cookie);
test_value; // 在site1.web.com下输出test_key
null; // 在site2.web.com下输出test_key
/*
* 2. 设置cookie到.web.com上
* url: site1.web.com
*/
Cookie cookie = new Cookie("test_key", "test_value");
cookie.setDomain(".web.com");
response.addCookie(cookie);
test_value; // 在site1.web.com下输出test_key
test_value; // 在site2.web.com下输出test_key
Cookie的组成
- path
- 作用路径
- 默认为/
- 应该以/结尾
- 同名Cookie,不同path,属于不同Cookie
- 匹配到的不同Cookie会一起发送
document.cookie = "N1=1; path=/path/";
document.cookie = "N1=2; path=/path"; // 和上面表达意思相同,但是由于path不同,会形成新的Cookie
document.cookie = "N1=3; path=path/"; // 使用相对路径
document.cookie = "N1=4; path=/paTH/"; // 区分大小写
Cookie的组成
- secure
- 是否适用安全协议
- 设置后Cookie只做用于HTTPS协议
- HTTPOnly
- 是否只能在HTTP协议上被访问
- 设置后document.cookie无法获取
Cookie的优缺点
- 优点
- 赋予了网络请求状态
- 存储在客户端,减小服务器负担
- 缺点
- 每次请求都需要携带,增加了带宽
- 容易被获取和篡改,有安全隐患
Cookie与Session
- 存储位置
- Cookie在浏览器,Session在服务器
- Cookie可以浏览器访问到,Session不能
- Session需要在浏览器存储一个Cookie,称为Session id,用于区分状态
Cookie与Session
- Session存储在服务器内存中
- Session的删除
- Session超时
- 服务器停止
端内webview的Cookie
- webview独立于浏览器cookie
- webview独立于端的cookie
- 同步端与webview的cookie
- 获取端内HTTPClient的cookie
- 设置cookie给webview
(以Android为例)
Thanks!
Cookie详解
By leegend
Cookie详解
- 174