HTTP の Set-Cookie レスポンスヘッダーは、サーバーからユーザーエージェントへクッキーを送信するために使用されます。

詳細については、HTTP クッキーのガイドを参照してください。

ヘッダー種別 レスポンスヘッダー
禁止ヘッダー名 いいえ

構文

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>; Domain=<domain-value>; Secure; HttpOnly

ディレクティブ

<cookie-name>=<cookie-value>
名前と値の組で始まるクッキーです。
  • <cookie-name> は US-ASCII 文字で、制御文字 (CTL)、空白、タブを除いたものです。 ( ) < > @ , ; : \ " / [ ] ? = { } のような区切り文字も含めることができません。
  • <cookie-value> は任意で二重引用符で囲むことができ、制御文字、空白、二重引用符、コンマ、セミコロン、バックスラッシュを除くすべての US-ASCII 文字が利用できます。 エンコーディング: 多くの実装ではクッキーの値に URL エンコーディングを施しますが、 RFC の仕様書では要求されていません。これは <cookie-value> に許可された文字についての要件を満足させるのに役立ちます。
  • __Secure- の接頭辞: 名前が __Secure- (接頭辞にダッシュを含む) で始まるクッキーは、 secure フラグを設定することが必要で、安全なページ (HTTPS) でなければなりません。
  • __Host- の接頭辞: 名前が __Host- で始まるクッキーは、 secure フラグを設定し、安全なページ (HTTPS) から読み込む必要があり、ドメインを指定することができず (従ってサブドメインにも送られません)、パスが "/" で終わる必要があります。
Expires=<date> Optional

クッキーの有効期限で、 HTTP の日時タイムスタンプです。詳細な書式は Date を参照してください。指定されない場合は、クッキーはセッションクッキーの寿命になります。セッションはクライアントがクライアントが終了したときに終了するので、セッションはその時点で削除されます。しかし、多くのウェブブラウザーはセッション復元と呼ばれる機能を持っており、これによってすべてのタブを保存し、次回ブラウザーを起動したときに戻すことができます。クッキーはその際にも、実際にはブラウザーを閉じていないかのように残ります。

期限が設定されていた場合、時刻と日付はサーバーではなく、クッキーが設定されるクライアントからの相対時刻で設定されます。

Max-Age=<number> Optional
クッキーの期限までの秒数です。ゼロまたは負の数値の場合は、クッキーは直ちに期限切れになります。古いブラウザー (IE6, IE7, IE8) は Max-Age に対応していません。他のブラウザーでは、 (Expires および Max-Age の) 両方が設定されていたら、 Max-Age が優先されます。
Domain=<domain-value> Optional
クッキーの送信先をこれらのホストに指定します。指定されない場合は、既定で現在の文書位置におけるホストの部分になります (ただし、サブドメインを含みません)。初期の仕様書とは逆に、ドメイン名の前のドットは無視されます。ドメイン名が指定された場合、サブドメインも常に含まれます。
Path=<path-value> Optional
Cookie ヘッダーを送信する前に要求するリソースが存在する URL のパスを示します。 %x2F ("/") の文字はディレクトリ区切りとして解釈され、サブディレクトリも同様に一致します (例えば path=/docs, "/docs", "/docs/Web/", "/docs/Web/HTTP" はすべて常に一致します)。
Secure Optional
セキュアクッキーは、リクエストが SSL と HTTPS プロトコルを使用して行われた場合にのみサーバーに送信されます。ただし HTTP クッキーは、例えば情報が暗号化されないなど、安全ではない仕組みを継承しているので、機密な情報や敏感な情報を転送したり格納したりしないようにしてください。

メモ: 安全ではないサイト (http:) は "secure" ディレクティブを付けてクッキーを設定することができなくなりました (Chrome 52 以降および Firefox 52 以降の新機能).

HttpOnly Optional
HttpOnly のクッキーは、 JavaScript の Document.cookie プロパティ、 XMLHttpRequest API, Request API からアクセスできず、クロスサイトスクリプティング (XSS) の攻撃を軽減します。
SameSite=Strict
SameSite=Lax Optional

サーバーに対してクッキーがサイト間リクエストでクッキーを送るべきではないことを主張することができ、それによってクロスサイトリクエストフォージェリ攻撃 (CSRF) に対していくらか防御することができます。

セッションクッキーはクライアントが終了したときに削除されます。 ExpiresMax-Age ディレクティブは指定しません。なお、ウェブブラウザーはセッションの復元を行うことがよくあります。

Set-Cookie: sessionid=38afes7a8; HttpOnly; Path=/

永続的クッキーは、クライアントが終了したときに期限切れにならず、特定の期限 (Expires) または特定の時間が過ぎた後 (Max-Age) に期限切れになります。

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

不正なドメイン

オリジンのサーバーを含まないドメインに所属するクッキーは、ユーザーエージェントが拒否します。次のクッキーは originalcompany.com でホストされたサーバーから設定しようとすると拒否されます。

Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk; Path=/; Expires=Wed, 30 Aug 2019 00:00:00 GMT

名前に __Secure- および __Host- の接頭辞が付いたクッキーは、安全な (HTTPS の) オリジンから secure ディレクティブを設定した場合のみ使用することができます。クッキーの接頭辞を実装していないクライアントでは、これらの保証を受けることができず、クッキー―は常に受け入れられます。

// 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 directive
Set-Cookie: __Secure-id=1

// Rejected due to the missing Path=/ directive
Set-Cookie: __Host-id=1; Secure

// Rejected due to setting a domain
Set-Cookie: __Host-id=1; Secure; Path=/; domain=example.com

仕様書

仕様書 題名
RFC 6265, セクション 4.1: Set-Cookie HTTP State Management Mechanism
draft-ietf-httpbis-rfc6265bis-02 Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies

ブラウザーの対応

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
基本対応Chrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 ありIE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 ありOpera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 あり
Max-AgeChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 ありIE 完全対応 8Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 ありOpera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 あり
HttpOnlyChrome 完全対応 1Edge 完全対応 ありFirefox 完全対応 3IE 完全対応 9Opera 完全対応 11Safari 完全対応 5WebView Android ? Chrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 4Samsung Internet Android 完全対応 あり
Cookie prefixesChrome 完全対応 49Edge 未対応 なしFirefox 完全対応 50IE 未対応 なしOpera 完全対応 36Safari 完全対応 ありWebView Android ? Chrome Android 完全対応 49Edge Mobile 未対応 なしFirefox Android 完全対応 50Opera Android 完全対応 36Safari iOS 完全対応 ありSamsung Internet Android 完全対応 5.0
SameSiteChrome 完全対応 51Edge 未対応 なしFirefox 完全対応 60IE 未対応 なしOpera 完全対応 39Safari 未対応 なしWebView Android 完全対応 51Chrome Android 完全対応 51Edge Mobile 未対応 なしFirefox Android 完全対応 60Opera Android 完全対応 39Safari iOS 未対応 なしSamsung Internet Android 完全対応 5.0

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明

互換性のメモ

  • Chrome 52 および Firefox 52 以降、セキュリティで保護されていないサイト (http:) では、 "secure" ディレクティブ付きでクッキーを設定することはできなくなりました。

関連情報

ドキュメントのタグと貢献者

このページの貢献者: mfuji09, silverskyvicto
最終更新者: mfuji09,