开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
cookie
cookie 最开始用于在客户端存储会话信息。即在服务器在响应 http请求时会发送 set-cookie http 头部包含会话信息。总之,cookie 是用来解决用户信息的存储,且应该存储在用户的机器上。浏览器存储会话信息,然后在之后的每个请求中都会将 cookie 返回给服务器,然后服务器就可以知道是谁发送信息。
构成
- 名称:cookie 的唯一标识
- 值:存储在 cookie 中的字符串值必须经过 URL 编码
- 域:cookie的有效域范围。发送到这个域的所有请求都会包含该 cookie,而这些域可能是子域,也可能不是其子域
- 路径:指定 cookie 只能有某路径访问
- 过期时间:即表示 cookie 有效期,到点就会从浏览器中删除。一般浏览器关闭都会删除所有的cookie ,不过可以设置不删除。
- 安全标志:设置安全标志,那么只有在使用 SSL 安全连接的情况下才会将 cookie 发送到服务器
限制
cookie 不是随意的值也不是任何人都可以发送的,其基本都是和特定域绑定的。这样是为了保证只被认可的接收者,不被其他的域访问。因为cookie 是存储在浏览器上,所以不难保证其不会被恶意利用,所以浏览器都会施加一些限制:
Version:0.9 StartHTML:0000000105 EndHTML:0000007078 StartFragment:0000000141 EndFragment:0000007038
- 不超过 300 个 cookie;
- 每个 cookie 不超过 4096 字节;
- 每个域不超过 20 个 cookie;
- 每个域不超过 81 920 字节。
每个域能设置的 cookie 总数也是受限的,但不同浏览器的限制不同。当然如果 cookie 总数超过了单个域的上限,浏览器就会删除之前设置例如:
- 最新版 IE 和 Edge 限制每个域不超过 50 个 cookie;
- 最新版 Firefox 限制每个域不超过 150 个 cookie;
- 最新版 Opera 限制每个域不超过 180 个 cookie;
- Safari 和 Chrome 对每个域的 cookie 数没有硬性限制。
因cookie 是在客户端上保存的,所以使用cookie 需要注意不要存储重要信息,不然容易被窃取。还有一个性能影响,所有的 cookie 都会作为请求头发送给服务器,如果 cookie 太大就会影响请求完成的时间就会越长。