セッションとCookieについて
ログインしたときやカートにものを入れたとき
例として、もしWebサイトにログインや何か商品をカートに入れる場面があったとします。
ログインしたはずなのにログインできていないことになっていたり、商品を買い物かごに入れたはずなのに、次の画面に進むと商品が入っていないと認識されてしまってはWebサイトとして成り立たない。
クライアントであるブラウザにセッションとしてユーザーの情報を持ち続けることでステートレス(ユーザが入力した情報を記憶せずに、次の動作を行うこと)なHTTP通信でもリクエストを特定のユーザーの情報として受け取ることができる。
セッションとは
Webアプリケーションは、ブラウザからサーバへHTTPリクエストを送ってから、HTTPレスポンスを受け取って画面に表示する。
HTTPはステートレスなプロトコルなので、そのままユーザから送られた1つ目のリクエストから2つ目のリクエストに引き継ぐことができない。
そこで、サーバ側にセッションという仕組みを用意して、一つのブラウザから連続して送られる一連のリクエストの間で「状態」の共有できるようにしている。
Cookieとは
ブラウザに保存される小さな情報またはその領域のことを言う。
セッションがアプリケーションサーバ側で独自に実現される仕組みに対して、CookieはWebブラウザとサーバの間でやりとりされる仕組み。
Coolkieでは、まずWebサーバからブラウザへHTTPレスポンスを返すときに、なんらかのCookie情報を含めて送っている。
Cookie情報は、キーと値が集まったもの。
ブラウザはこのCookie情報をサーバのドメインなどの情報に紐づけて保存する。
次に同じドメインに対してHTTPリクエストを送る際に、保存していたCookieの情報を添えて送る。
これによって、Webサーバは、以前にどのようなCookie情報を受け取ったブラウザからリクエストが送られてきたのかを把握することができる。
Cookieは複数のリクエストの間で共有したい「状態」をブラウザに保存する仕組みのことをいう。
ログイン機能を実装する前に知っておくべき知識
クライアントからサーバに特定の情報を渡す方法
① GETリクエストのURLパラメータにクエリ文字として記載して残す
→ URLパラメータはユーザに見えるので、簡単に変更できてしまうので❌
② POSTリクエストのリクエストボディに内容を含めて渡す
→ POSTリクエストの内容は、ブラウザの開発者用ツールを使って確認や変更ができてしまうので❌
③ Cookieに保存してリクエストを送る
→ 基本的にはこの方法で、ブラウザのCookieをセッション情報の保存先にしている⭕️
参考
・【Rails】ログイン機能を実装する上で必要不可欠な「Session」について解説|TechTechMedia
・Rails セキュリティガイド - Railsガイド