【Web初心者】Cookieの仕組み

本記事では、HTTP通信を行う際に頻繁に利用されるCookieの役割や仕組みについて解説していきます。

Cookieとは

ネット上のAmazonなどのショッピングサイトでログイン→商品画面→購入→ログアウトまでの一連の処理を行うためには購入者が誰であるのか、何の商品を必要としているのかなどの状態を保持している必要があります。

しかしインターネット通信に用いられるHTTPは、ステートレスなプロトコルであるため、クライアントとサーバ間の一連のやり取りの状態を保持して管理する仕組みがございません。

HTTPの欠点を補うために、クライアント側の情報を保持してサーバ側に伝達するためのデータがCookieです。

例えば、ショッピングサイトでは、接続情報、ユーザの氏名・住所などの個人情報や購入した商品情報などの情報が含まれています。

ステートレスについては以下の記事をご覧ください。

Cookieの受け渡し

Webサーバは、接続してきたWebブラウザ(クライアント)に対して要求されたhtmlや画像などのコンテンツと一緒にWebブラウザに保存しておく情報をCookieとして送信します。

Webブラウザは受け取ったCookieを保持しておき、次回以降Webサーバにアクセスした際にリクエストと一緒にCookieを送信することでWebサーバ側はクライアントを識別することが可能となります。

Cookieの受け渡し

HTTPを利用したステートレスな通信でありながら、ステートフルな動作を可能とするのがCookieの重要な役割です。

Cookieの情報が入る場所

Cookieの情報はメッセージヘッダに入れられて送信されます。

サーバ側は、レスポンスヘッダ内にset-cookieを含めることによってCookieを送信し、クライアントはリクエストヘッダにcookieヘッダを入れることによってサーバに対してCookieを送信します。

サーバ側からCookieを送信する際には、set-Cookieヘッダ内に属性を指定することでCookieの有効期限やHTTPSで通信しているときにのみCookieを送信するなどの設定をすることが可能となっています。

ヘッダー種別フェールド名ヘッダーの内容
レスポンスヘッダーSet-Cookieクライアントの状態を保持するための情報
リクエストヘッダーCookieWebサーバから受け取ったCookieの情報
ヘッダーフィールドのCookie
属性名属性の内容
name=value必須項目。Cookieにつける名前の値(value)
expires=dateCookieの有効期限。年月日、時分秒を指定できる。
任意項目。この属性を指定しない場合にはWebブラウザを閉じることによってCookieが削除される。
max-age=secondsCookieが残る秒数を指定。
secureHTTPSで通信している場合だけCookieを送信する
Set-Cookieに含まれる属性の例

Cookieの有効期限

前章にて、Cookieには有効期限を設定することができるとお伝えしましたが、有効期限が設定されていないCookieのことをセッションCookieといいます。

有効期限が設定されているCookieは、Webブラウザが閉じられたとしても有効期限が訪れるまでWebブラウザ上に残り続けます。

一方でセッションCookieはブラウザを閉じると同時に削除されるという性質を持っています。

CookieがWebブラウザ上に残っているとCookie情報を盗まれて、なりすましをされるなどのリスクに晒されるため、Cookieを利用したショッピングサイトなどでは有効期限を指定しないセッションCookieが利用される場合が多いです。

最後に

ここまで、HTTP通信を行う上でのCookieの役割やCookieが多く利用されてきた所以である利便性について解説してきました。

近年では、Cookieのリスクも問題視されており、変わる手段なども用意されてきているようです。