はじめに
cookieとセッション、今まで何度も調べてはいるけれどよく忘れてしまい、わかったようでわからない状態が続いていたので、この機会に言語化したいと思います。
HTTPはステートレス
Webサイトを閲覧するときは、ブラウザとサーバー間でHTTPプロトコルを使ってやり取りが行なわれていますが、HTTPはステートレスという特徴があり、状態を持ちません。つまり、同じユーザーからリクエストを送っても、サーバーはいつも初めまして状態で同じユーザーとは認識できないのです。
しかし、世の中には、ステートレスでないWebサービスがあります。代表的なのが、ログイン機能でしょう。YouTubeにログインすれば、各ユーザーにあった画面をちゃんと返してくれますし、あるページから別ページに移動したときも、ユーザー情報を失うことく常に同一ユーザーであることを認識してくれます。
このように、HTTPにステートフルな振る舞いを実現させる手法が、cookieによるセッション管理です。
cookieとセッション
まずセッションとは、システムにログインしてからログアウトするまでの一連の処理を表す概念です。セッションという概念があることで、ユーザーは認証を一回行うだけで、サーバーと仲良しでいることができるのです。
cookieとは、セッションを実現するための手法であることから、セッションは目的であり、cookieはその手段と言えます。
Railsでは、sessionというメソッドが用意されています。
session[:user_id] = "hogehoge"
のように呼び出してあげると、Railsは、暗号化したcookieを生成し、デフォルトでブラウザ側に保存されます。実際に保存されたcookieは、Developerツールのapplicationタグで確認することもできます。
まとめ
この辺りの話は奥が深いです。cookieに関わるセキュリティ周りの話も深掘りしていきたい。