Cookie

334 阅读2分钟

什么是cookie

cookie就是服务器发给浏览器的一小段信息

浏览器每次向服务器发出请求,就会自动附上这段信息。

Cookie 主要保存状态信息,以下是一些主要用途。

  • 对话(session)管理:保存登录、购物车等需要记录的信息。
  • 个性化信息:保存用户的偏好,比如网页的字体大小、背景色等等。
  • 追踪用户:记录和分析用户行为。

只有那些每次请求都需要让服务器知道的信息,才应该放在 Cookie 里面。比如登录过的信息,这个就相当于一张门票,由服务器发给浏览器。

每个 Cookie 都有以下几方面的元数据。

  • Cookie 的名字
  • Cookie 的值(真正的数据写在这里面)
  • 到期时间(超过这个时间会失效)
  • 所属域名(默认为当前域名)
  • 生效的路径(默认为当前网址)

举例来说,用户访问网址www.example.com,服务器在浏览器写入一个 Cookie。这个 Cookie 的所属域名为www.example.com,生效路径为根路径/。如果 Cookie 的生效路径设为/forums,那么这个 Cookie 只有在访问www.example.com/forums及其子路径时才有效。以后,浏览器访问某个路径之前,就会找出对该域名和路径有效,并且还没有到期的 Cookie,一起发送给服务器。

document.cookie可以返回当前页面的cookie

cookie与HTTP协议

cookie由http协议生成,当然也主要被http协议使用

生成cookie

response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript'])response.setHeader('Set-Cookie', 'type=ninja');

生成cookie语法MDN

除了 Cookie 的值,Set-Cookie字段还可以附加 Cookie 的属性。

HTTP 请求:Cookie 的发送

浏览器向服务器发送 HTTP 请求时,每个请求都会带上相应的 Cookie。也就是说,把服务器早前保存在浏览器的这段信息,再发回服务器。这时要使用 HTTP 头信息的Cookie字段。

response.headers['cookie']

Cookie字段可以包含多个 Cookie,使用分号(;)分隔。

服务器收到浏览器发来的 Cookie 时,有两点是无法知道的。

  • Cookie 的各种属性,比如何时过期。
  • 哪个域名设置的 Cookie,到底是一级域名设的,还是某一个二级域名设的。

Cookie 的属性

Expires到期时间

Max-Age 在 cookie 失效之前需要经过的秒数。秒数为 0 或 -1 将会使 cookie 直接过期。

Domain 指定cookie 可以送达的主机名

Path 路径

HttpOnly指定该 Cookie 无法通过 JavaScript 脚本拿到,主要是document.cookie属性、XMLHttpRequest对象和 Request API 都拿不到该属性。这样就防止了该 Cookie 被脚本读到,只有浏览器发出 HTTP 请求时,才会带上该 Cookie。

参考文档:

wangdoc.com/javascript/…

developer.mozilla.org/zh-CN/docs/…