Set-Cookie

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

詳細については、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>; SameSite=None  

// 以下の例のように、複数のディレクティブも利用することができます。
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly

ディレクティブ

<cookie-name>=<cookie-value>
名前と値の組で始まるクッキーです。
  • <cookie-name> は任意の US-ASCII 文字の集合で、制御文字、空白、タブを除いたものです。 ( ) < > @ , ; : \ " / [ ] ? = { } のような区切り文字も含めることができません。
  • <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
クッキーの期限までの秒数です。ゼロまたは負の数値の場合は、クッキーは直ちに期限切れになります。 Expires および Max-Age の両方が設定されていたら、 Max-Age が優先されます。
Domain=<domain-value> Optional
クッキーの送信先をこれらのホストに指定します。
  • 指定されなかった場合は、既定で現在の文書の URL におけるホスト名の部分になり、サブドメインを含みません。
  • 初期の仕様書とは逆に、ドメイン名の前のドット (.example.com) は無視されます。
  • ドメイン名が指定された場合、サブドメインも常に含まれます。
Path=<path-value> Optional
リクエストされる URL に含まれるパス、またはブラウザーが Cookie ヘッダーを送信しないパスを示します。
スラッシュ ("/") の文字はディレクトリ区切りとして解釈され、サブディレクトリも同様に一致します (例えば Path=/docs, /docs, /docs/Web/, /docs/Web/HTTP はすべて常に一致します)。
Secure Optional
セキュアクッキーは、リクエストが SSL と HTTPS プロトコルを使用して行われた場合にのみサーバーに送信されます。ただし HTTP クッキーは、例えば情報が暗号化されないなど、安全ではない仕組みを継承しているので、機密な情報や敏感な情報を転送したり格納したりしないようにしてください。

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

HttpOnly Optional
JavaScript がこのクッキーにアクセスすることを禁止します。例えば、 Document.cookie プロパティ、 XMLHttpRequest API, Request API などです。これにより、クロスサイトスクリプティング (XSS) の攻撃を軽減します。
SameSite=<samesite-value> Optional
  • Strict
  • Lax
  • None

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

セッションクッキーはクライアントが終了したときに削除されます。 ExpiresMax-Age ディレクティブを指定しないとクッキーはセッションクッキーになります。

Set-Cookie: sessionId=38afes7a8

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

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT
Set-Cookie: id=a3fWa; Max-Age=2592000

不正なドメイン

オリジンのサーバーを含まないドメインに所属するクッキーは、ユーザーエージェントが拒否します

次のクッキーは originalcompany.com でホストされたサーバーから設定しようとすると拒否されます。

Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk

__Secure- または __Host- の接頭辞が付いたクッキー名は、安全な (HTTPS の) オリジンから secure ディレクティブを設定した場合のみ使用することができます。

加えて、 __Host- の接頭辞が付いたクッキーは、 / (ホストの任意のパスという意味) を持つ必要があり、 Domain 属性を持つことができません。

クッキーの接頭辞を実装していないクライアントでは、これらの保証を受けることができず、クッキー―は常に受け入れられます。

// 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

ブラウザーの互換性

互換性のメモ

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

関連情報