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。 有点迷。