クッキーとセッション? 今理解していることをアウトプットしてみる
今日はクッキーとセッションについて、理解がふわふわしているところがあったのでアウトプットしていきたいと思います。
クッキーとセッションの前に、HTTP通信について
「HTTP通信はステートレスである」
クッキーとセッションについて理解するにはこのHTTP通信の性質を理解する必要があります。
ステートレスである、というのはHTTP通信ではサーバー側はクライアントの状態を保持し続けられない、ということです。
イメージでは、リクエスト・レスポンスの動作の度に記憶喪失になる感じです。
クライアント:「Aです。ログインします。マイページをください。」
サーバー: 「はい、どうぞ。Aさんのマイページです。」
クライアント:「先ほどの者です。ユーザー情報編集ページをください。」
サーバー: 「どなた?覚えてないのでわかりません。」
これではリクエストの度にログインしなければいけなくて不便ですが、現状私たちが使っているWebサービスではこんな事は起こっていないです。
それは、クッキーとセッションによって、情報を保持する(ステートフルにする)仕組みを確立しているからです。
クッキー(cookie)とセッション(session)の役割
- クッキー:ブラウザ側で情報を保存する仕組み
- セッション:ユーザーによる一連の動作/サーバー側で情報を一時保存する仕組み
端的に説明するとこんな感じです。セッションに関しては本来の意味は「ユーザーによる一連の動作」を指すっぽいながらも、その動作を「一時保存しておく仕組み」の呼び名にもなっているっぽいな?という印象です。(※個人の見解です。)
では、クッキーとセッションはどのようにしてHTTP通信をステートフルにしているのか、先ほどの例と対比させてみたいと思います。
クライアント:「Aです。ログインします。マイページをください。」
サーバー: 「Aさんですね。あなたのIDとPASSをセッションに保存します。」
「どうぞ、マイページとセッションIDです。」
クライアント:「ありがとう。IDはクッキーに保存しておきますね。」クライアント:「先ほどの者です。ユーザー情報編集ページをください。
クッキーも一緒に送ります。」
サーバー: 「クッキーに保存されているセッションIDを確認・照合しました。」
「Aさんですね。ユーザー情報編集ページを送ります。」
このような感じで、サーバー側はセッションを作成しそのIDを発行、クライアント側はセッションIDをブラウザのクッキーに保存し、リクエストの度にクッキーを一緒に送ることで、ステートフルな状態を作り上げています。
参考
私の中でいちばんしくっりきた解説です。
読んでおきたいなと思った本をメモ。
Discussion