りゅうじの学習blog

学習したことをアウトプットしていきます。

2021年9月29日 ログイン機能を実装するにあたってCookie セッション ステートレスについて復習しました

Cookieとは

ブラウザに保存される小さな情報またはその領域

セッションとは

サーバ側で一時的に保持できる情報またはその領域

HTTPはステートレス

日常生活での例えが分かりやすかったので引用します。

客 『ハンバーガー1つと...』
店員 『はい、ハンバーガー1つですね!』
客 『あとポテト1つと...』
店員 『はい、ポテト1つですね!』
客 『あとコーラ1つください』
店員 『はい、ご注文はコーラ1つで¥100になります!』

こういったように、一回のやり取りしかできないのをステートレスと言います。

これではWebサービスの機能として問題があります。いいねもブックマークもフォローもできません。

それを解決するためにCookieとセッションがあります。

上記の例だと、客が誰かを店員が認識する必要があり、そのためにセッションIDという番号を客に持たせます。

セッションID
0001 1
0002 2

このサーバが独自に発行するセッションIDをブラウザのCookieに保存することで、店員は客を区別できるし、過去にしたやり取りを記憶した上でのやり取りが可能になります。

コードで書くと

# session => RailsがよしなにセッションID`0001`に対応する1行を取って来てくれるので開発者はセッションIDを意識する必要はない
# session[:user_id] => 1
user = User.find_by(id: session[:user_id])

このようになり、店員(サーバ)からしたら、毎回セッションIDで客を区別するわけだから、この記憶すること自体に名前をつけて分かりやすくしてしまおう!となりcurrent_user と名付けてしまったのがこちら!

def current_user
  User.find_by(id: session[:user_id])
end 

これで店員は客を認識でき、過去のやり取りも記憶でき、思い出す作業に名前をつけることで思い出しやすくなりました。

ログインとは

セッションでCookieにユーザの情報を保存することで、異なるHTTPリクエストに繋がりを持たせることです。