跳到主要内容

cookie

cookie 中一些常用属性

使用场景

由服务器指定 Cookie 后,浏览器的每次请求都会携带 Cookie 数据,因此会带来额外的性能开销(尤其是在移动环境下)。

如果只是为了存储数据,建议使用新的浏览器 API,如使用 Web storage API (本地存储和会话存储)或 IndexedDB 。

Cookie 主要用于以下三个方面:

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

当服务器收到 HTTP 请求时,服务器可以在响应头里面添加一个 Set-Cookie 选项。

HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: valid_cookie=choco; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
Set-Cookie: secure_cookie=strawberry; Secure; HttpOnly;
Set-Cookie: scope_cookie=strawberry; Domain=mozilla.org; Path=/docs;

浏览器收到响应后通常会保存下 Cookie,之后对该服务器每一次请求中都通过 Cookie 请求头部将 Cookie 信息发送给服务器。

GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry

属性

相关属性

过期时间(Expires)

有效期(Max-Age)

提示

当 Cookie 的过期时间被设定时,设定的日期和时间只与客户端相关,而不是服务端。

Secure

标记为 Secure 的 Cookie 只应通过被 HTTPS 协议加密过的请求发送给服务端

HttpOnly

JavaScript Document.cookie API 无法访问带有 HttpOnly 属性的 cookie;此类 Cookie 仅作用于服务器。

Domain 和 Path 标识定义了 Cookie 的作用域:即允许 Cookie 应该发送给哪些 URL

Domain

Domain 指定了哪些主机可以接受 Cookie。

如果不指定,默认为 origin,不包含子域名。

如果指定了 Domain,则一般包含子域名。

因此,指定 Domain 比省略它的限制要少。

例如,如果设置 Domain=mozilla.org,则 Cookie 也包含在子域名中(如 developer.mozilla.org)。

Path

Path 标识指定了主机下的哪些路径可以接受 Cookie(该 URL 路径必须存在于请求 URL 中)。以字符 "/" 作为路径分隔符,子路径也会被匹配。

例如,设置 Path=/docs,则以下地址都会匹配:

  • /docs
  • /docs/Web/
  • /docs/Web/HTTP

SameSite

SameSite Cookie 允许服务器要求某个 cookie 在跨站请求时不会被发送

SameSite 可以有下面三种值:

  • None。浏览器会在同站请求、跨站请求下继续发送 cookies,不区分大小写。
  • Strict。浏览器将只在访问相同站点时发送 cookie。(在原有 Cookies 的限制条件上的加强,如上文 “Cookie 的作用域” 所述)
  • Lax。与 Strict 类似,但用户从外部站点导航至 URL 时(例如通过链接)除外。

导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单。详见下表。

请求类型示例正常情况Lax
链接<a href="..."></a>发送 Cookie发送 Cookie
预加载<link rel="prerender" href="..."/>发送 Cookie发送 Cookie
GET 表单<form method="GET" action="...">发送 Cookie发送 Cookie
POST 表单<form method="POST" action="...">发送 Cookie不发送
iframe<iframe src="..."></iframe>发送 Cookie不发送
AJAX$.get("...")发送 Cookie不发送
Image<img src="...">发送 Cookie不发送

参考