©
This document usesPHP Chinese website manualRelease
所述Set-Cookie
HTTP 响应报头被用于从服务器向用户代理发送 cookie。
有关更多信息,请参阅 HTTP cookie 指南。
Header type |
Response header |
---|---|
Forbidden header name |
no |
Set-Cookie:= Set-Cookie: = ; Expires= Set-Cookie: = ; Max-Age= Set-Cookie: = ; Domain= Set-Cookie: = ; Path= Set-Cookie: = ; Secure Set-Cookie: = ; HttpOnly Set-Cookie: = ; SameSite=Strict Set-Cookie: = ; SameSite=Lax// Multiple directives are also possible, for example:Set-Cookie: = ; Domain= ; Secure; HttpOnly
Cookie 以名称 - 值对开头:
可以是除控制字符(CTL),空格或制表符之外的任何US-ASCII字符。它也不能包含像下面这样的分隔符:()<> @,; :\“/?= {}。
可以有选择地用双引号设置,并且任何 US-ASCII 字符(不包括 CTL,空格,双引号,逗号,分号和反斜线)都是允许的。编码:许多实现在 cookie 值上执行 URL 编码,但不是每个 RFC 规范都要求的。它确实有助于满足
__Secure-
:名称以__Secure-
(破折号为前缀的一部分)开头的Cookie 必须使用该secure
标志进行设置,并且必须来自安全页面(HTTPS)。
__Host-
:以名称开头的 Cookie__Host-
必须设置为secure
标志,必须来自安全页面(HTTPS),不得指定域(因此不会发送到子域),路径必须为“/”。
Expires=
作为 HTTP 日期时间戳的 cookie 的最大生存期。请参阅Date
详细格式。如果未指定,则 Cookie 将具有会话 cookie的生存期。会话在客户端关闭时结束,意味着会话 cookie 将在此时被删除。但是,许多 Web 浏览器都有一项称为会话恢复的功能,可以保存所有选项卡,并在下次使用浏览器时让它们恢复。 Cookies 也将出现,就像您从未真正关闭浏览器一样。
如果设置了到期日期,则设置的时间和日期与相关 Cookie 的客户端设置相关,而不是服务器。
Max-Age = <非零数字>直到 Cookie 过期的可选秒数。一个或多个数字1到9.较旧的浏览器(ie6,ie7 和 ie8)不支持最大年龄。对于其他浏览器,如果(Expires
和Max-Age
)都设置了,Max-Age
将具有优先权。域= <域值>可选指定将向其发送 cookie 的那些主机。如果未指定,则默认为当前文档位置的主机部分(但不包括子域)。与之前的规范相反,域名中的前导点被忽略。如果指定了域,则始终包含子域。Path =
注意:不安全的网站(http:
)不能使用“安全”指令设置 cookie(Chrome 52 +和Firefox 52+中的新增功能)。
HttpOnly 无法通过 JavaScript 访问可选 HTTP ,HTTP cookie,通过此Document.cookie
属性XMLHttpRequest
和Request
API来缓解对跨站点脚本攻击(XSS)的攻击 .SameSite = Strict
SameSite=Lax Optional
允许服务器声明 Cookie 不应与跨站点请求一起发送,这为跨站点请求伪造攻击(CSRF)提供了一些保护。
会话 cookie 将在客户端关闭时被删除。他们没有指定Expires
或Max-Age
指令。请注意,Web 浏览器通常会启用会话恢复。
Set-Cookie: sessionid=38afes7a8; HttpOnly; Path=/
永久性 cookies 不是在客户关闭时到期,而是在特定日期(Expires
)或特定时间长度()后过期Max-Age
。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
属于不包含原始服务器的域的 cookie 应该被用户代理拒绝。如果以下 cookie 由托管在 originalcompany.com 上的服务器设置,则它将被拒绝。
Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk; Path=/; Expires=Wed, 30 Aug 2019 00:00:00 GMT
与前缀饼干名称__Secure-
和__Host-
可如果它们设置与只使用secure
从安全(HTTPS)的起源指令。另外,带__Host-
前缀的 cookies 必须有一个“/”(整个主机)的路径,并且不能有域属性。对于不实施 cookie 前缀的客户,您不能指望获得这些额外保证,cookies 将始终被接受。
// Both accepted when from a secure origin (HTTPS)Set-Cookie: __Secure-ID=123; Secure; Domain=example.com Set-Cookie: __Host-ID=123; Secure; Path=/// Rejected due to missing Secure directiveSet-Cookie: __Secure-id=1// Rejected due to the missing Path=/ directiveSet-Cookie: __Host-id=1; Secure// Rejected due to setting a domainSet-Cookie: __Host-id=1; Secure; Path=/; domain=example.com
Specification |
Title |
---|---|
RFC 6265, section 4.1: Set-Cookie |
HTTP State Management Mechanism |
RFC draft-ietf-httpbis-cookie-prefixes-00 |
Cookie Prefixes |
RFC draft-ietf-httpbis-cookie-same-site-00 |
Same-Site Cookies |
RFC draft-ietf-httpbis-cookie-alone-01 |
Strict Secure Cookies |
Feature |
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
---|---|---|---|---|---|---|
Basic Support |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
Max-Age |
(Yes) |
(Yes) |
(Yes) |
8.0 |
(Yes) |
(Yes) |
HttpOnly |
1.0 |
(Yes) |
3.0 |
9.0 |
11 |
5.0 |
Cookie prefixes |
49 |
(Yes) |
50 |
? |
36 |
(Yes) |
SameSite |
51 |
No |
No1 |
No |
39 |
No |
Feature |
Android |
Chrome for Android |
Edge mobile |
Firefox for Android |
IE mobile |
Opera Android |
iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
Max-Age |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
HttpOnly |
? |
(Yes) |
(Yes) |
1.0 |
(Yes) |
(Yes) |
iOS 4 |
Cookie prefixes |
? |
49 |
(Yes) |
50 |
? |
36 |
(Yes) |
SameSite |
51 |
51 |
No |
No1 |
No |
39 |
No |
请参阅 Bugzilla.Compatibility 说明中的错误795346
从 Chrome 52 和 Firefox 52 开始,不安全的站点(http:
)不能再使用“安全”指令来设置 cookie。