Railsにおけるセッション管理とCookieについて
セッション管理とCookieの働きについてあやふやだったのでまとめてみました
HTTP通信
- クライアントとサーバ間はHTTPというルールでやり取りをする
- クライアントからサーバに対して「リクエスト」が送られる
HTTPはステートレス
- ステートレス=記憶力がない
- たとえばyahooにアクセスするときには、クライアントからサーバへ「yahooの情報ちょうだい」とリクエストを送るが、その直後には送ったことすら覚えていない
- yahooの情報がレスポンスで送られてきて画面表示をしたとしても、送られてきたこと自体を覚えていない
- 要求しっぱなし。もらいっぱなし。
ステートレスだと、Webアプリでログインする時にどんな問題が発生するか
- ログインできても、ログインしたことすら覚えていない
- そのため、次にアクセスした時には、またログインしなければならない
- ショッピングサイトの場合、カートに入れた商品情報が保持されない
そこでCookieの登場
- CookieStoreを前提に書きます
- ログインできた時点で、サーバでユーザーのidをCookieに入れてクライアントへ送り返す
コード例:
session[:user_id] = user.id
こうすることで、暗号化されたuser_idがHTTPレスポンスヘッダのSet-Cookieフィールドに格納され、レスポンスとしてクライアントへ送り返される
そのCookieから暗号化されたuser_idを復元・抽出し、そのidと合致するユーザをログイン状態として処理をする
コード例:
@current_user ||= User.find_by(id: session[:user_id])
- ログイン中は、user_idをCookieの中に含めたままクライアント〜サーバ間をグルグルと回っている状況
- ログアウト時には、サーバにてCookieからuser_idを消去する
コード例:
session.delete(:user_id)
とか
session[:user_id] = nil
など。
- user_idが除かれたCookieが、サーバからクライアントに渡る(user_idが存在しない=ログアウト状態)
- ログアウト中は、user_idが除かれたCookieがクライアント〜サーバ間をグルグルと回ることになる
Author And Source
この問題について(Railsにおけるセッション管理とCookieについて), 我々は、より多くの情報をここで見つけました https://qiita.com/taraontara/items/673d8a806833977e8106著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .