2種類のセッション(一時セッションと永続セッション)について
◆一時セッション ← rails tutorial8章
・sessionメソッドにより、ユーザーIDを一時cookiesに保存すること(ハッシュとして扱える)
session[:user_id] = user.id
・ブラウザを閉じるorログアウトで一時cookies(session)は破棄される。
【流れ】
IDとPWでログイン
↓
ユーザーIDでDBから検索
↓
PWを検証する
↓
ユーザーが存在してPWも一致していればtrueを返す
↓
ブラウザの一時cookiesにユーザーIDを格納 & ユーザーのプロフィールページにリダイレクト
↓
ブラウザを閉じるorログアウトで一時cookiesを破棄する
◆永続セッション ← rails tutorial9章
・cookiesメソッドにより、ユーザーIDと記憶トークンを永続cookiesに保存すること(ハッシュとして扱える)
cookies.permanent.signed[:user_id] = user.id
cookies.permanent[:remember_token] = user.remember_token
・ブラウザを閉じても永続cookiesは破棄されない
・ユーザーがログアウトしたら永続cookiesは破棄される
・セキュリティ対策として、user_idは暗号化する
【流れ】
Remember meのチェックボックスをオンにしてログインする
↓
urlsafe_base64 でランダムな記憶トークンを作成
↓
DBに記憶トークンをハッシュ化(記憶ダイジェスト)して保存
↓
暗号化されたユーザーIDと作成した記憶トークンが永続cookiesに保存される(デフォルトで期限20年)
↓
ユーザーのプロフィールページにリダイレクト
↓
セッションが切れたとすると、、
↓
永続cookiesからユーザーIDと記憶トークンを取り出し、DBに保存されている記憶ダイジェストと比較
↓
一致してたら、ログインする
↓
ログアウト時は記憶ダイジェストにnilを入れ、永続cookiesのユーザーIDと記憶トークンを削除する