はじめに
只今、Web関連について学習中です。
CookieについてはWeb関連の知識に密接に関わっているのでCookieについてどういうものかを調べた内容をアウトプットします。
Cookieとは?
HTTPで状態を記憶するために使われる仕組みがCookieです。
サーバからクライアントのブラウザに対して送付されるデータ(Cookie)を使って、サーバーとブラウザ間でデータを交換することができます。
活用例としては、一度ログインをおこなったサイトに対して、一度そのページを離れてしまった場合でも、再度サイトに戻った時に再度ログイン作業をおこなわずともログイン状態の画面が再度表示される、といった仕組みはCookieによるものです。
実データなどをCookieに入れておくと不正アクセスされた際に情報が漏洩してしまうので
もセッションIDをCookieに含ませてサーバー側でそのセッションIDを元にセッションデータを取り出して状態を維持する方法もあります。
ちなみに、状態が維持されることを「ステートフル」、維持されないことを「ステートレス」と言います。
上記を実現するためにはSet-CookieヘッダーとCookieヘッダーを使用します。
Set-Cookie
ヘッダーとCookie
ヘッダー
HTTP の Set-Cookie レスポンスヘッダーは、サーバーがユーザーエージェントへ Cookie を送信するために使用します。単純な Cookie は次のように設定されます。
Set-Cookie: <cookie-name>=<cookie-value>
サーバーからクライアントへのcookieの組み合わせを保存するように指示するには以下のようになります。
HTTP/2.0 200 OK
Content-Type: text/html
Set-Cookie: SESSIONID=xxxxxx…
その後のサーバーへのリクエストは、ブラウザーに以前格納されたすべてのCookieを、Cookieヘッダーを使用してサーバーへ送信します。
GET /sample_page.html HTTP/2.0
Host: www.example.com
Cookie: SESSIONID=xxxxxx…
Cookie スコープの定義
DomainまたはPath属性にてCookieの送信先のホストやURLなどを定義できます。
Domain属性
Domain
属性はCookieの送信先ホストを指定することができます。
もし、Domain
を指定しなかった場合はCookieを設定したホストを Domain
として指定します。
ですが、サブドメインなどは除外されてしまいます。
例えば、example.org がドメインだとすると developer.example.org などのサブドメインは含まれません。
なので、サブドメイン間でユーザー情報などをやり取りしたい場合には役立ちます。
設定方法
Domain=example.org
上記のように設定すると、今度はdeveloper.example.orgを含むことができます。
Path属性
Path属性は、URLの中にこれは必ず含んで欲しいURLのパスを定義することができます。
要はドメイン名/Path ← /
の後からのパスを定義できます。
例えば、Path=/foo
と設定したとします。
以下のリクエストパスでCookieが使用できます。
・/foo
・/foo/bar
ですが、以下のリクエストパスでは使用できません。
・/foobar
Cookieの持続時間の定義
Cookieには2通りの方法で持続時間を定義できます。
セッションCookie
セッションCookieは、ブラウザが閉じられると自動的に削除されます。
ブラウザはいつ「現在のセッション」が終わったと見なすかを定義し、ブラウザによっては再起動にセッションの復元を使用することができます。そのため、結果的にセッションCookieが無期限に持続することがあります。
Expires属性
Expires属性は、Cookieが有効期限を指定するために使用されます。
具体的な日時と時刻を指定し、その日付と時刻を過ぎるとCookieは自動的に削除されます。
Set-Cookie: SESSIONID=xxxxxx…; Expires=Wed, 08 Jul 2023 12:00:00 GMT;
おわりに
Cookieについてざっくりとですが記事としてアウトプットしました。
普段何となくな理解だったので設定できる属性やその役割など少し明確になったかと思います。
参照資料