cookie

less than 1 minute read

HTTP 协议是一种无状态的协议,不能在服务器上保持一次会话的连续状态信息。随着万维网的不断发展,HTTP 的无状态性不能满足某些应用的需求,给 Web 服务器和客户端的操作带来种种不便。在此背景下,提出 HTTP 的状态管理机制——Cookie 机制。它是对 HTTP 协议的一种补充,以保持服务器和客户端的连续状态。

HTTP Cookie,通常直接叫做 cookie,最初是在客户端用于存储会话信息的,是一种能够让 Web 服务器把少量数据储存到客户端,或是从客户端读取数据的技术。

cookie 的构成:名称 、值 、域 、路径 、失效时间 、安全标志。

我们在浏览某个网站时会生成一个由 Web 服务器的 CGI 脚本创建的存储在浏览器客户端计算机上的一个小文本文件,即 cookie 文件,其格式为:用户名@网站地址[数字].txt。

服务器将数据储存到客户端时,会先对任意 HTTP 请求发送 Set-Cookie HTTP 头作为响应的一部分,格式可能如下:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
# Other-header: other-header-value

之后浏览器通过为每个请求添加 Cookie HTTP 头将信息发送服务器,格式如下:

GET /index.html HTTP/1.1
Cookie: name=value
# Other-header: other-header-value

cookie操作过程

JavaScript 支持的 cookie 唯一接口:

document.cookie;

通过这个接口可以对 cookie 操作:获取属性值、设置属性值、删除属性。

cookie 里所有 key 和 value 都是经过 URL 编码的:

encodeURIComponent(str); // 编码
decodeURIComponent(str); // 解码

另外,浏览器对 cookie 是有限制的:

  • cookie 要绑定在特定的域名下
  • 有的浏览器对每个域的 cookie 总数是有限制的
  • 限制 cookie 的尺寸

其中解决第二个限制的方法是,给 cookie 设置子 cookie,使用 cookie 值来存储多个名称值对儿,如:

name=name1=value&name2=value2&name3=value3&name4=value4&name5=value5

3. 其它特点

  • HTTP 专有 cookie
  • cookie 信息过大会影响性能
  • 不要在 cookie 里存储重要和敏感的数据

参考:

《JavaScript 高级程序设计(第 3 版)》-第 23 章 离线应用与客户端存储
《深入解析 Cookie 技术》
《The Cookie Concept》

Updated:

Leave a comment