Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

Set-Cookie(セットクッキー)とは | 意味や読み方など丁寧でわかりやすい用語解説

Set-Cookie(セットクッキー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

セットクッキー (セットクッキー)

英語表記

Set-Cookie (セットクッキー)

用語解説

Set-Cookieヘッダは、Webサーバーがクライアント(主にWebブラウザ)に対し、クッキーを設定または更新するように指示するために使用するHTTPレスポンスヘッダである。HTTPプロトコルは、本来、一度のリクエストとレスポンスで通信が完結するステートレスな性質を持つ。これは、サーバーがクライアントの状態(例えば、ログインしているか、ショッピングカートに何を入れたかなど)を記憶しないことを意味する。しかし、現代の多くのWebアプリケーションでは、ユーザーが複数のページを移動しても、そのユーザーの状態を維持する必要がある。このステートレスなHTTPの課題を解決し、Webアプリケーションでユーザーの状態を管理可能にする主要な仕組みの一つがクッキーであり、そのクッキーをサーバーからクライアントへ送り、ブラウザに保存させる役割を担うのがSet-Cookieヘッダである。

Set-Cookieヘッダの形式は、「Set-Cookie: <クッキー名>=<クッキー値>; <属性1>=<値1>; <属性2>=<値2>; ...」のようになる。ここで設定されたクッキーは、ブラウザによって保存され、その後、同じサーバーへの後続のリクエストには「Cookie: <クッキー名>=<クッキー値>」というHTTPリクエストヘッダとして自動的に付与され、サーバーへ送り返される。これにより、サーバーは以前のリクエストからの状態を識別し、適切な処理を行うことが可能になる。例えば、ユーザーがログインに成功した場合、サーバーはSet-Cookieヘッダを通じてセッションIDを含むクッキーをブラウザに設定する。その後、ユーザーが別のページに移動する際、ブラウザはそのセッションIDクッキーをサーバーに送信するため、サーバーはユーザーがログイン済みであることを認識し、ログイン状態を維持できる。

Set-Cookieヘッダには、クッキーの動作を制御するための様々な属性が存在する。これらの属性は、クッキーの有効期限、適用範囲、セキュリティ上の挙動などを詳細に設定するために不可欠である。

まず、Expires属性とMax-Age属性は、クッキーの有効期限を定める。Expiresは特定の日時(例: Expires=Wed, 21 Oct 2023 07:28:00 GMT)を指定し、その日時を過ぎるとクッキーは無効化され、ブラウザから削除される。一方、Max-Ageはクッキーが設定されてから何秒間有効かを指定する(例: Max-Age=3600は1時間有効)。これらの属性が指定されない場合、そのクッキーは「セッションクッキー」となり、ブラウザが閉じられると同時に削除される。これに対し、ExpiresMax-Ageが指定されたクッキーは「永続クッキー」と呼ばれ、指定された期間内はブラウザを閉じても保持される。

Domain属性は、クッキーがどのドメインに対して送信されるかを制限する。例えば、Domain=example.comと設定されたクッキーは、example.comとそのサブドメイン(www.example.comsub.example.comなど)に対してのみ送信される。この属性を指定しない場合、クッキーを設定したサーバーのドメインのみに適用される。

Path属性は、クッキーがどのURLパスに対して送信されるかを制限する。例えば、Path=/appと設定されたクッキーは、/app以下のパス(例: /app/page1, /app/users)へのリクエストでのみ送信される。Path=/と設定すると、そのドメイン内の全てのパスでクッキーが送信される。これにより、特定のアプリケーション領域にのみクッキーを適用し、不要な情報送信を防ぐことが可能になる。

セキュリティに関連する重要な属性として、SecureHttpOnlySameSiteがある。

Secure属性は、クッキーがHTTPS接続でのみ送信されるように指示する。この属性が設定されている場合、HTTP接続ではクッキーは送信されず、ネットワーク上での盗聴のリスクを軽減する。特に認証情報や機密性の高い情報を扱うクッキーには、この属性を常に設定することが強く推奨される。

HttpOnly属性は、JavaScriptなどのクライアントサイドスクリプトからクッキーへのアクセスを禁止する。この属性が設定されたクッキーは、document.cookieのようなJavaScriptのAPIからは読み書きできない。これにより、クロスサイトスクリプティング(XSS)攻撃によって悪意のあるスクリプトがWebページに埋め込まれたとしても、攻撃者がユーザーのセッションクッキーを盗み取り、セッションハイジャックを行うことを防ぐのに役立つ。

SameSite属性は、クロスサイトリクエストフォージェリ(CSRF)攻撃に対する防御策として導入された。この属性は、クッキーがオリジン間リクエスト(クロスサイトリクエスト)で送信されるかどうかを制御する。SameSite属性には主に三つの値がある。SameSite=Strictは最も厳格で、同じサイトからのリクエストでのみクッキーを送信する。例えば、ユーザーが別のサイトからのリンクをクリックして遷移した場合など、クロスサイトのナビゲーションではクッキーは送信されない。これにより、CSRF攻撃を強力に防ぐが、ユーザー体験に影響を与える可能性もある。SameSite=Laxはやや緩和された設定で、トップレベルのナビゲーション(ユーザーがリンクをクリックしてページ遷移するようなケース)など、一部のクロスサイトリクエストではクッキーを送信する。これはCSRF対策とユーザーの利便性のバランスを取った設定として広く利用されている。SameSite=Noneは、クッキーが全てのオリジン間リクエストで送信されることを許可する。この設定を使用する場合、Secure属性も同時に設定する必要がある。Noneは、例えば他サイトに埋め込むウィジェットなどで、クロスサイトでクッキーが必要な場合に利用される。

これらの属性は、Webアプリケーションの機能性とセキュリティを両立させるために慎重に設定する必要がある。特に、認証セッションを管理するクッキーや、ユーザーの個人情報を間接的に識別できるクッキーには、SecureHttpOnlySameSite属性を適切に適用し、セキュリティリスクを最小限に抑えることが求められる。Set-Cookieヘッダは、単にブラウザに情報を保存させるだけでなく、ユーザー認証状態の維持、ショッピングカートの内容管理、ユーザー設定のパーソナライズ、さらにはウェブ解析ツールによるユーザー行動の追跡など、現代のWebアプリケーションの根幹をなす様々な機能を実現するための重要なメカニズムである。システムエンジニアを目指す上で、このヘッダとそれに伴うクッキーの動作原理、そしてセキュリティ上の注意点を理解することは、安全で信頼性の高いWebシステムを構築するために不可欠な知識となる。

関連コンテンツ

関連IT用語