一、什么是 Cookie?
cookie 是 document 对象的一个属性,是一小段文本信息,伴随着用户请求在 web 服务器和浏览器之间传递。它是存储于访问者的计算机中的变量,每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值,可以通过 document.cookie 来获取存在的 cookie。
cookie 是存于用户硬盘的一个文件,这个文件通常对应于一个域名,也就是说 cookie 可以跨越一个域名下的多个网页,但不能跨越多个域名使用。cookie 将信息存储于用户硬盘,因此可以作为全局变量,这是它最大的一个优点。它最根本的用途是 Cookie 能够帮助 Web 站点保存有关访问者的信息。列举cookie的几种小用途:
- 保存用户登录信息:这应该是最常用的了,当你登录一个界面,并勾选”下次自动登录”选项,下次登录就不需要重复输入,甚至不需要重复验证了;这是通过 cookie 来保存用户的 id 和 password 等信息。
- 创建购物车:有些购物网站会把已选物品保存在 cookie 中,这样可以实现不同页面之间的数据同步(同一个域名下是可以共享 cookie 的),同时在提交订单的时候又可以把这些 cookie 传递到后台。
- 跟踪用户行为:有些网站会通过 cookie 记录用户搜索过的偏好信息,然后向用户做个性化推广,你在浏览其他网页的时候会发现旁边的小广告都是自己最近百度搜过的东西。当然,这是可以被禁用的,这也是cookie的缺点之一。
Cookie 是怎么起作用的?
因为 cookie 是存在用户硬盘中,在用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息。当用户再次访问这个站点时,浏览器就会在本地硬盘上查找与该 URL 相关联的 Cookie。如果该 Cookie 存在,浏览器就将它添加到 request header 的 Cookie 字段中,与 http 请求一起发送到该站点。
Cookie 的格式和常见的属性
每个 cookie 都以名/值对的形式,即 name=value,且两对 cookie 间以 分号 和 空格 隔开。
- name:为一个 cookie 的名称。
- value:为一个 cookie 的值。
- domain:用来控制 cookie 对「哪个域」有效,默认为设置 cookie 的那个域。这个值可以包含子域,也可以不包含它。例如可以设置成 “.alvinwp.com” (不包含子域,表示它对 alvinwp.com 的所有子域都有效),也可以是 “www.alvinwp.com" (包含子域,表示只对主域 alvinwp.com 下的子域 www 有效)。
- path:用来控制 cookie 发送的指定域的「路径」,默认为 “/“,表示指定域下的所有路径都能访问。它是在域名的基础下,指定可以访问的路径。例如 cookie 设置为 “domain=.alvinwp.com; path=/demo”,那么只有 “.alvinwp.com/demo” 及 “/demo” 下的任一子目录如 “/demo/aaa” 或 “/webhp/bbb” 会发送 cookie 信息,而 “.alvinwp.com” 就不会发送,即使它们来自同一个域。
- expires/Max-Age:为此 cookie 超时时间。若设置其值为一个时间,那么当到达此时间后,此 cookie 失效。不设置的话默认值是 Session,意思是 cookie 会和 session 一起失效。当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此 cookie 失效。
- Size:为此 cookie 大小。
- http:为 cookie 的 httponly 属性。若此属性为 true,则只有在 http 请求头中会带有此 cookie 的信息,而不能通过 document.cookie 来访问此 cookie。
- secure:设置是否只能通过 https 来传递此条 cookie。
domain 和 path 这两个选项共同决定了 cookie 能被哪些页面共享。
- 本文作者: Alvin
- 本文链接: https://alvinyw.github.io/2018/05/7/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!