クッキーとセッションの違い
Table of Contents
こんな方におすすめ
・クッキーやセッションとは何かを知りたい
・クッキーとセッションの違いを知りたい
クッキー・セッションとは何か?
先日、改めてクッキーやセッションについて学びなおした私が、クッキー・セッションの考え方や両者の違いについて、自分のための備忘録もかねて、本記事にまとめようと思います。
まずクッキーとセッションの役割ですが、一般的な(クッキー・セッションを用いない)クライアントとサーバーのやり取りでは、それ以前のクライアントとサーバーのやり取りとは全く無関係です。そこで、それらを紐づけして「関係ある」ものとする手段が、クッキーやセッションです。
例えば、私たちがよく目にするログイン機能では、前に一度ログインしていると、ログアウトしなければ次回以降はログインせずに入れますね。これは、前に行われた、ログインする際のクライアントとサーバーのやり取りが今回のページ表示に「関係している」ということになります。似たようなもので、前に入力したユーザー名が、次回のログイン以降で予め入力されている場合がありますね。両方とも、クッキー・セッションによって実現しています。
具体的にどのように実現しているかといいますと、初回(クッキーがない状態)にログイン(クライアントがサーバーにリクエスト)した際に、サーバーはクッキーを発行します。2回目以降のログインでは、クライアントがリクエストする際に、初回に発行されたクッキー情報を送信します。すると、それに応じたページをサーバーが表示します(ユーザー専用ページ等)。イメージ的には会員カードみたいな感じですね。
ここまではクッキーの場合を例に話を進めましたが、会員カードという点ではセッションも共通しています。
では、ここからはクッキーとセッションでどこが違うのかについて説明していきます。
クッキーとセッションの相違点
先ほどまでクッキーを例に話をしましたが、上図の例ではユーザー名が行き来しています。このようにクッキーの場合は、クライアントが初回に入力した値(ユーザー名等)を使ってクッキーを発行しています。しかし、実データがクライアントとサーバー間を行き来するのは、セキュリティ上あまり好ましくありません。また、クッキーの場合はデータがクライアント上に保存される点でも、セキュリティ的に良くありません。
そこで登場するのが、セッションです。セッションは実データをそのまま使うかわりに、セッションIDと呼ばれるものを発行します。これにより、実データの代わりにセッションIDが行き来することになるので、セキュリティ的に危険性が下がります。(下図では、セッションID5532としていますが、実際はもっと長くて複雑です。)
しかしここで、セッションIDがばれたら実データが分かってしまうのでは、と思った方は大正解です。ただ、じゃあ意味ないじゃんということではありません。なぜかと言いますと、セッションIDはブラウザを閉じると破棄される、一時的なものだからです。したがって、セッションIDがばれたとしても、そのIDと実データが紐づいている期間は、高々ユーザーがブラウザを閉じるまでなのです。
つまり、先ほどクッキーとセッションはどちらも会員カードといいましたが、厳密にはセッションは入場券という感じになります。なので、クッキーと違って、データがクライアント上に保存されることもありません。(入場券は帰宅したら捨てますよね)
そしたらセッションだけでいいじゃないかということですが、セッションには不向きなことがあります。それは、ブラウザを閉じた後でもデータを保持しておくということです。たとえば、ブラウザを閉じるたびに、ログイン時にユーザー名から入れなおすのは億劫ですよね。それを保存しておくのは、セッションではできません。
したがって、使い分けとしては、ブラウザを閉じるまでの間だけデータを保持する目的であればセッション、ブラウザを閉じた後でもデータを保存する目的だったらクッキーを使用するということになります。
クッキー・セッションを上手く使い分けて、セキュリティ的に優れたコードを書けるように頑張りましょう!