まるノート

備忘録も兼ねて、様々なお役立ち情報をまとめています。

Cookieとは

Cookieという用語はよく耳にしていましたが、調べると必ずと言っていいほど Session という用語が合わせて登場し、 自分はこの2つの意味が混合してしまい、これまで理解があいまいでした。

Cookie と Session がどんな関連性があるのか、様々なWebサイト等を参考に自分が調べたり検証した内容を記事にしてみました。


Cookieとは

基本的な特徴は以下の通りです。

  • ユーザーがWebサイトにアクセスした時に、アクセス先のサーバーが発行する。
  • ユーザーのブラウザに保存される。
  • Cookieの実態は小さなファイル。SessionIDや有効期限、その他様々な情報が記述されている。

Webサイトを構築するサーバーにはSession情報と呼ばれる内容が保存されています。 Session情報には、アクセスしたユーザーのログイン情報や、ショッピングサイトであればカートに入れた商品情報など ユーザーが将来必要にするであろう情報が保存されます。

そして、「どのユーザーの」Session情報かを識別するSessionIDがCookieには保存されているのです。

これが、CookieとSessionがどのように関係しているか、の答えであり、
この2つは切り離して考えることは出来ない理由でもあります。


ブラウザに保存されたCookie を見てみる。

Chromeを利用して、Webサイトにアクセスした際に保存されたCookieを実際に見てみたいと思います。

設定 > プライバシーとセキュリティ > Cookieとその他のサイトデータ

すべてのCookieとサイトデータの表示

すると現在保存されているCookieの一覧が表示される。

一覧からどれか一つCookieを選択すると、以下のような情報がみれます。

Cookieには有効期限があり、有効期限がきれると消滅します。
また上の画像でご覧頂いた通り、色んなWebサイトにアクセスするほどどんどん溜まってゆきます。
ブラウザの動作も少なからず重くなってゆくので定期的に削除するのが良いでしょう。

上記「すべてのCookieとサイトデータの表示」画面はブラウザのURLに
「chrome://settings/siteData」を入力すれば直接開くこともできます。


Cookieに記載されたSessionIDを見てみる。

例として amazon のサイトにアクセスしてみます。
すると、アクセス後には以下の Cookie がブラウザに保存ています。

上から2番目(6件のCookie)と書いてある所を開くと以下のようになっており、
確かに SessionID という名前のCookieが存在するのがわかると思います。

試しに、何か適当な商品をカートに入れて一度ブラウザを閉じても、カートに入れた商品が残っているはずです。

これは amazon の場合、SessionID を保存したCookie の有効期限が約1年だからです。

有効期限の設定がない Cookie の場合、ブラウザを閉じると Cookie も消滅します。


補足 HTTP通信のステートレス性について

基本的にHTTP通信では、サーバー側が前回の通信で「どのユーザーがアクセスしたか」といった状態を覚えておくことはできません。
つまり、リクエスト/レスポンスの1往復のやり取りを、前回の内容と関連付けることができません。(通信のたびにサーバーが記憶をなくすようなイメージ)

このHTTP通信の性質をステートレス性と呼びます。

そこでWebサイトはCookieを発行し利用することでHTTP通信のステートレスな性質を補っている、と考えることもできます。

補足として、ブラウザ側が閲覧したページを一時保存しておく情報をキャッシュといいます。 キャッシュは画像情報などを保存する仕組みで、一度訪れたWebサイトはキャッシュにより効率的にブラウザ表示ができます。


以上、Cookieについて調べたことのまとめでした。
自分自身、Webサイトにアクセスすることでどんなブラウザにどんな Cookie が保存されたか見てみることで、 以前よりも言葉の意味がイメージできるようになった気がします。