This page looks best with JavaScript enabled
⚠️

Cookieとセッションについて

 ·   ·  ☕ 3 分で読めます
✏️

Webストレージ

  • ローカルストレージ(ブラウザを閉じても残る)
    • ずっと保存したい(情報を与えっぱなしみたいな??)
  • セッションストレージ(サーバー関係ない。ブラウザを閉じると消える)

🍪ストレージ(ブラウザを閉じても残る)

  • サーバーにデータを飛ばせる(サーバー側からも取得したい値)

この辺のデータはブラウザ / ドメインの中で完結している。
サーバーレスとかいうのはローカルストレージとかそのへんを使えばできるのか??

データをとりあえず保存している

レスポンスヘッダのSet-Cookieヘッダからname, valueを渡す。これは何でも渡せる。
ブラウザ「おー、これをクッキーに入れとけばええんか」

セッション

あなたはだあれ??「おいおいさっき会っただろー俺だよ俺」
同一であることを確認!

  • ブラウザ
    • Cookieストレージの中のSessionID(value)に保存する
  • サーバー
    • SessionIDを見て「あ、あのときのお前かあ」

セッションテーブルはセッションIDからユーザーIDを特定するためのもの!session_idとuser_idを紐付ける
サーバー「このセッションidを持つお前は〇〇だな / 登録していないから知らねえわ」(名前は知らないけど、さっき見たお前だな、っていうのはわかる)

保存の仕方

  • cookie_store(railsのデフォルト)
    • クッキーにテーブルの情報(セッションIDもユーザーIDも)が全部はいってるよ(だって入れる場所がないんだもん)
  • redis
    • クッキーでセッションIDだけ扱う。他のデータはredisで持つ(これなら漏れても安全)

以下はcookie_storeの話↓
だから、session(ブラウザのCookieの対応するkeyのvalue: sessionのデータ)を取得するとめっっちゃいろいろデータが入っている。
session[:user_id]っていうのはその中のuser_idを取得しているだけ(他のデータの取り方と変わらない)
で、session[:hoge] = 'foo'とかで値を入れることも可能

クッキーストアだと、そもそも情報全てをブラウザ側に持たれてしまうので、サーバー側からログアウトさせるということができない
サーバーでセッションを管理していると、セッションテーブルを削除することで強制ログアウトさせることができる

ブラウザの🍪はブラウザを閉じても保存される(付与するときに期限を決めておくことはできる)
初回だけ出るポップアップとかも🍪を使って実現できる

Share on

END
END
@aiandrox

 
目次