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

こんな方におすすめ

 ・クッキーやセッションとは何かを知りたい

 ・クッキーとセッションの違いを知りたい

クッキー・セッションとは何か?

 先日、改めてクッキーやセッションについて学びなおした私が、クッキー・セッションの考え方や両者の違いについて、自分のための備忘録もかねて、本記事にまとめようと思います。

 まずクッキーとセッションの役割ですが、一般的な(クッキー・セッションを用いない)クライアントとサーバーのやり取りでは、それ以前のクライアントとサーバーのやり取りとは全く無関係です。そこで、それらを紐づけして「関係ある」ものとする手段が、クッキーやセッションです。

 例えば、私たちがよく目にするログイン機能では、前に一度ログインしていると、ログアウトしなければ次回以降はログインせずに入れますね。これは、前に行われた、ログインする際のクライアントとサーバーのやり取りが今回のページ表示に「関係している」ということになります。似たようなもので、前に入力したユーザー名が、次回のログイン以降で予め入力されている場合がありますね。両方とも、クッキー・セッションによって実現しています。

 具体的にどのように実現しているかといいますと、初回(クッキーがない状態)にログイン(クライアントがサーバーにリクエスト)した際に、サーバーはクッキーを発行します。2回目以降のログインでは、クライアントがリクエストする際に、初回に発行されたクッキー情報を送信します。すると、それに応じたページをサーバーが表示します(ユーザー専用ページ等)。イメージ的には会員カードみたいな感じですね。

 ここまではクッキーの場合を例に話を進めましたが、会員カードという点ではセッションも共通しています。

 では、ここからはクッキーとセッションでどこが違うのかについて説明していきます。

クッキーとセッションの相違点

 先ほどまでクッキーを例に話をしましたが、上図の例ではユーザー名が行き来しています。このようにクッキーの場合は、クライアントが初回に入力した値(ユーザー名等)を使ってクッキーを発行しています。しかし、実データがクライアントとサーバー間を行き来するのは、セキュリティ上あまり好ましくありません。また、クッキーの場合はデータがクライアント上に保存される点でも、セキュリティ的に良くありません。

 そこで登場するのが、セッションです。セッションは実データをそのまま使うかわりに、セッションIDと呼ばれるものを発行します。これにより、実データの代わりにセッションIDが行き来することになるので、セキュリティ的に危険性が下がります。(下図では、セッションID5532としていますが、実際はもっと長くて複雑です。)

 しかしここで、セッションIDがばれたら実データが分かってしまうのでは、と思った方は大正解です。ただ、じゃあ意味ないじゃんということではありません。なぜかと言いますと、セッションIDはブラウザを閉じると破棄される、一時的なものだからです。したがって、セッションIDがばれたとしても、そのIDと実データが紐づいている期間は、高々ユーザーがブラウザを閉じるまでなのです。

 つまり、先ほどクッキーとセッションはどちらも会員カードといいましたが、厳密にはセッションは入場券という感じになります。なので、クッキーと違って、データがクライアント上に保存されることもありません。(入場券は帰宅したら捨てますよね)

 そしたらセッションだけでいいじゃないかということですが、セッションには不向きなことがあります。それは、ブラウザを閉じた後でもデータを保持しておくということです。たとえば、ブラウザを閉じるたびに、ログイン時にユーザー名から入れなおすのは億劫ですよね。それを保存しておくのは、セッションではできません。

 したがって、使い分けとしては、ブラウザを閉じるまでの間だけデータを保持する目的であればセッション、ブラウザを閉じた後でもデータを保存する目的だったらクッキーを使用するということになります。

 クッキー・セッションを上手く使い分けて、セキュリティ的に優れたコードを書けるように頑張りましょう!