Cookie 的下发与回传
Cookie 的下发与回传
服务器下发 Cookie
下发通过 Set-Cookie
响应头设置,后跟需要设置的 cookie 名 =
连接其值。再后面通过 ;
分隔的其他修改属性。
Set-Cookie: <cookie-name>=<cookie-value>
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit>
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>
Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value>
Set-Cookie: <cookie-name>=<cookie-value>; Secure
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly
Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Strict
Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax
Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None
// Multiple attributes are also possible, for example:
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly
同时发下多个 Cookie
同时下发多个 Cookie 时,可以像上面那个设置多个 Set-Cookie
响应头,也可以在一个响应头中完成。多个 Cookie 使用 ,
分隔。
同个 Set-Cookie
header 中设置多个 cookie name 的情况:
Set-Cookie: <cookie-name>=<cookie-value>; Attribute=value, <cookie-name>=<cookie-value>; Attribute=value, ...
示例:
Set-Cookie: user_id=5; Expires=Fri, 5 Oct 2018 14:28:00 GMT; Secure; HttpOnly, remember_me=true
注意,Cookie 的过期属性 Expires
其值会带逗号,在解析 Cookie 时需要特别处理,不要和用来分隔多个 Cookie 的逗号混淆。比如 Expires=Fri, 5 Oct 2018 14:28:00 GMT;
Cookie 属性
常用的 Cookie 属性:
Expires=<date>
:设置 Cookie 过期时间,格式见此,示例:new Date().toUTCString()
,JS 中可通过new Date().toUTCString()
生成。未设置则与 Session Cookie 等效,浏览器标签页关闭后失效。Max-Age=<number>
:过期时间,按秒算,如果同时设置了Expires
,此规则优先级更高。设置 0 或负值将使 Cookie 立即失效.Domain=<domain-value>
:允许发送 Cookie 的 domain 列表,缺省时为当前页面的 host。Path=<path-value>
:设置 Cookie 生效的路径。Secure
:只发送到 HTTPS 服务器。HttpOnly
:防止代码操作 Cookie,譬如 JavaScript 中通过Document.cookie
来访问。SameSite=<samesite-value>
:Strict
:同源情况下浏览器才发送该 CookieLax
:跨域加载图片或 iframe 时不发送 Cookie,点击链接会发送None
:同源与否均发送。
浏览器回传 Cookie
浏览器通过 Cookie
请求头回传 Cookie,回传时只回传 Cookie 名称和值,不回传 Cookie 属性。
Cookie: user_id=5; remember_me=true
需要注意,回传时用分号 ;
分隔多个 Cookie,而服务器下发时使用逗号 ,
分隔多个 Cookie。 有点迷。