違いを解説君

あるゆる物事の"違い"をわかりやすく解説する情報マガジン

クッキー

ITの違い

クッキー(Cookie)とセッション(Session)の違いをわかりやすく解説

Webの開発や運用を担当すると、必ず耳にするのが『クッキー(Cookie)』と『セッション(Session)』。

中には、初めて『クッキー』と聞いて、お菓子と勘違いする人もいるかも知れませんね。

『クッキー』と『セッション』は、どちらもWebアプリを構築するために欠かせない技術です。

しかし、両者をきちんと区別できている人は案外少ないのではないでしょうか。

あなたは、『クッキー』と『セッション』の違いについて説明ができますか?

 

はなこ
Webアプリを作成する時に、『クッキー』と『セッション』が登場するじゃない。

あれって、何が違うのかよくわからないのよね。

どちらも重要な技術だね。

でも、僕も違いについてはよく知らないんだ。

たろう
はなこ
じゃあ、ちょっと調べてみましょうか。

 

今回は、『クッキー』と『セッション』の違いについて解説します。

スポンサーリンク

『クッキー(Cookie)』と『セッション(Session)』とは?

『クッキー』と『セッション』が、どんなものなのかを理解するためには、まずWebアプリで使われるプロトコルである『http』の特徴を知る必要があります。

 

『ステートレス』と『ステートフル』

『http』は、『ステートレス』なプロトコルと呼ばれます。

『ステートレス』とは、直訳すると『状態を持たない』という意味ですね。

状態を持たないとはどういうことでしょうか?

『ステートレス』の反対は『ステートフル』で、こちらは『状態を持つ』ことを表しています。

 

『ステートフル』なプロトコルの代表例は『ftp』ですね。

『ftp』では、通信の開始時にユーザ名とパスワードをサーバ側に送ります。

そうしてようやく、サーバ側にあるファイルのリストを受信したり、ファイルのダウンロードやアップロードができるようになります。

つまり、『ftp』では

『ユーザ名やパスワードをやり取りする』というサーバとの会話

があるわけですね。

このように、

クライアントからの要求に伴って状態が変化していくプロトコルを『ステートフル・プロトコル(Stateful Protocol)』と言います。

 

しかし、『http』 の場合は事情が違います。

『http』では、例えばクライアントがサーバ上のファイルを要求したら、サーバ側はそのファイルの内容をクライアントに返すという単純なやり取りだけで終わってしまいます。

『ftp』のように、ユーザ名やパスワードを送るという手順はないわけですね。

このプロトコルを『ステートレス・プロトコル(Stateless Protocol)』といいます。

 

『ステートレス』の欠点

『http』に代表される『ステートレス』なプロトコルは、

通信内容が非常に単純で分かりやすい

という特徴があります。

 

しかし、Webアプリを作成するときには、問題になります。

例えば、ログイン認証をしてから、あるページにアクセスできる仕組みを作りたいとします。

最初の画面で、ユーザ名とパスワードを入力させます。

そのユーザ名とパスワードが正しければ、次のページにジャンプするように作成したとしましょう。

こういった仕組みは、割と簡単に作ることができます。

 

しかし、ここで問題が発生するのです。

ブラウザでは、直接URLを指定することができます。

ジャンプしたページのファイル名が分かってしまったら、そのURLを直接入力すれば、ログイン認証せずに目的のページへジャンプできることになります。

これでは、ログイン認証をする意味がありません。

つまり、『ftp』のときと同じように、ユーザ名とパスワードを入力した状態をチェックする仕組みが必要になるわけです。

 

『クッキー』とは?

そこで利用できるのが『クッキー』です。

『クッキー』は、Webサーバからクライアントへ渡される小さな情報のことで、クライアント内ではファイルとして保存されます。

サーバへリクエストする時、クライアントが『クッキー』の情報(例えばユーザ名とパスワード)をいっしょにサーバへ送るようにしておきます。

サーバは、その情報を見て、ページを表示するかどうかを判断することができるわけですね。

 

これで全てうまくいったように見えますが、実はまだ問題があります。

それは、

『クッキー』の情報がクライアント側に残るという問題です。

クライアントに残るということは、その情報を第三者が盗み見ることも可能であるということですね。

つまりこの場合、ユーザ名やパスワードを盗まれる危険があります。

さらに、クッキーの情報は毎回サーバへ送られます。

その通信内容を誰かが盗み見ていれば、やはりユーザ名やパスワードを盗まれる原因になりますね。

 

『セッション』とは?

そこで登場するのが『セッション』という考え方です。

『セッション』とは、処理の一連の流れを指します。

例えば、ログイン認証から始まり、次のページを表示するという処理の流れは一つの『セッション』になります。

最初のログイン認証が完了した時、Webサーバは『セッションID』という一意の番号をクライアント側に送ります。

この『セッションID』が『クッキー』としてクライアントに保存されるわけです。

クライアント側がいったんブラウザを閉じて、今度はログイン認証を通らずに、直接次のページにアクセスしたとき、『セッションID』がサーバ側に送られます。

サーバは、送られた『セッションID』をチェックして認証済みのユーザであることを確認し、レスポンスを返すわけです。

こうすれば、最初のログオン時を除き、ユーザ名とパスワードはやり取りする内容の中になく、『セッションID』しかやり取りしませんね。

こうして、安全にWebアプリケーションを利用できるようになるわけです。

 

『クッキー』と『セッション』の違い

ノートパソコンとクッキー

ノートパソコンとクッキー

『クッキー』と『セッション』の主な違いをまとめると、次のようになります。

『クッキー』と『セッション』の違い

  • 『クッキー』はクライアント側に保存され、サーバへリクエストする時にいっしょに渡す情報であり、『セッション』は処理の一連の流れを意味する。
  • 『クッキー』はクライアント側に残るデータであり、『セッション』はサーバ側に残るデータである。

 

本来の意味

『クッキー』は、

サーバからクライアントに渡される小さな情報

のことで、クライアントの中にファイルとして保存されるのでしたね。

それに対して、『セッション』は

サーバとクライアントがやり取りする一連の処理の流れ

を意味していました。

このように、『クッキー』と『セッション』では、意味が全く異なることになります。

 

よく使われる説明

『セッション』については、サーバ側に残される情報のことを指すと説明していることがよくあります。

つまり、

『クッキー』はクライアント側、『セッション』はサーバ側に残るデータとして区別しているわけですね。

 

例えば、ショッピングサイトなどで購入を選択した品物は、いったんブラウザを閉じてから、もう一度見てもちゃんと残っていますよね。

これは、どの品物を選択したかという情報がサーバ側に残っているからです。

この情報を『セッション』と説明しているわけですね。

本来の意味とは異なりますが、こういった説明がされている場合があるので、混乱しないように注意しましょう。

 

はなこ
なかなか難しい話ね。
でも、セキュリティのことを考えると、大事なポイントだから、ちゃんと理解しておく必要があるね。
たろう

スポンサーリンク

まとめ

今回の違いのポイントを、まとめていきましょう。

ポイント

  • 『http』は、『ステートレス』なプロトコルであり、状態を保持しておくことができない。
  • 『クッキー』は、Webサーバからクライアントへ渡される小さな情報のことで、クライアント内ではファイルとして保存される。
  • 『セッション』は、サーバとクライアント間の一連の処理の流れを意味する。
  • 大半のWebアプリケーションでは、『クッキー』を使った一意の番号『セッションID』でクライアントが誰かを識別し、必要な情報はサーバ側で保持しておく。
  • 『クッキー』はクライアント側に残るデータであり、『セッション』はサーバ側に残るデータであると説明されている場合がある。

『クッキー』と『セッション』は、Webアプリケーションの開発には欠かせない必須技術です。

どんなものなのか、よく理解しておくようにしましょうね。

関連記事

-ITの違い

Copyright© 違いを解説君 , 2020 All Rights Reserved.