クッキー
RFC 6265で定義されているHTTPにおけるブラウザとサーバー間で状態を管理するプロトコル。
HTTPにおける通信ではステートレスなので同じユーザーからのリクエストだとしても1回目のリクエスト2回目のリクエストで区別することができない。そこで、ユーザーに関する情報(ユーザーID,パスワード)などをブラウザ内のクッキーにテキストファイルとして保存する。この保存された情報をリクエスト時にサーバーに送ることで、サーバー側はどのユーザーのリクエストかを判別することができる。
ここで重要なのは、ユーザー情報そのものをクッキーに保存している点である。
セッション
セッションとは通信の開始から終わりまでの一連のやり取りのこと。
セッションIDと呼ばれる識別子によってユーザーを判別する。クッキー との違いはユーザー情報そのものをユーザー識別として使うのではなく、セッションに紐づけられた識別子でユーザーを判別する。また、このセッションIDの保存場所はクッキーでもURLでも隠しinputフィールドでも良い。
また、セッションIDとそれに紐づくユーザー情報はウェブサーバーのメモリ上だったり、何らかのデータベースで保存される。
デフォルトでは、セッション管理にウェブサーバーのメモリが使用される。しかし、この方法だと負荷分散のためにウェブサーバーを複数台立てていた場合に共有することが難しい。そのため、Redisなどのデータベースを使用するのが好ましい。
参考記事
https://tech-blog.rakus.co.jp/entry/2017/10/17/111828
https://blog.takanabe.tokyo/2014/12/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%81%AE%E5%91%A8%E8%BE%BA%E7%9F%A5%E8%AD%98%E3%81%BE%E3%81%A8%E3%82%81/