Cookie详解

Cookie产生的原因

  • HTTP协议是无状态协议
    • 请求结束后关闭连接
    • 单次请求之间独立

Browser

Server

request1

request2

Cookie产生的原因

  • 应用是有状态的
    • 单点登录(SSO)
    • 页面信息应用

Cookie产生的原因

  • Cookie的产生
    • 1994年Lou Moutulli引入Cookie概念
    • 将HTTP请求带上Cookie文本,赋予web记忆

Cookie的交互过程

  1. 访问page1时server返回请求,告诉浏览器要保存Cookie
  2. 浏览器接到Cookie进行保存
  3. 访问page2时带上对应的Cookie
  4. 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
    1. 获取端内HTTPClient的cookie
    2. 设置cookie给webview

(以Android为例)

Thanks!

Cookie详解

By leegend

Cookie详解

  • 174