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