Successfully reported this slideshow.
Your SlideShare is downloading. ×

Session管理とRailsのcookie store

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Vuejs meetup
Vuejs meetup
Loading in …3
×

Check these out next

1 of 99 Ad

Session管理とRailsのcookie store

Download to read offline

ログイン機能を支えるsession管理の話と、Railsのcookie storeの話です。ステートフル・ステートレスの話が出てきます。

ログイン機能を支えるsession管理の話と、Railsのcookie storeの話です。ステートフル・ステートレスの話が出てきます。

Advertisement
Advertisement

More Related Content

Recently uploaded (20)

Advertisement

Session管理とRailsのcookie store

  1. 1. @carotene4035 session管理理
  2. 2. 前の通信は引き継がない ステートレス
  3. 3. いい感じにわかりやすいステートレスの例例 ポテトください
  4. 4. いい感じにわかりやすいステートレスの例例 かしこまりました
  5. 5. いい感じにわかりやすいステートレスの例例 Mサイズで
  6. 6. いい感じにわかりやすいステートレスの例例 何の話?
  7. 7. いい感じにわかりやすいステートレスの例例 かしこまりました ポテトください 何の話? Mサイズで
  8. 8. いい感じにわかりやすいステートレスの例例 かしこまりました ポテトください 何の話? Mサイズで ステートレスでは 前の通信は引き継がない
  9. 9. いい感じにわかりやすいステートレスの例例 かしこまりました ポテトください 何の話? Mサイズで 前の通信内容の   「ポテトください」はもう無い     だから話が通じない  
  10. 10. 前の通信は引き継がない ↓ 誰がどういう状態かを保持しない ステートレス
  11. 11. 前の通信を引き継ぐ ステートフル
  12. 12. いい感じにわかりやすいステートフルの例例 ポテトください
  13. 13. いい感じにわかりやすいステートフルの例例 かしこまりました ポテト
  14. 14. いい感じにわかりやすいステートフルの例例 Mサイズで ポテト
  15. 15. いい感じにわかりやすいステートフルの例例 680円です。 ポテト Mサイズ
  16. 16. 前の通信を引き継ぐ ↓ 誰がどういう状態かを保持できる ステートフル
  17. 17. ステートフルじゃないと 困る時がある ネットショップ、 ログイン管理理等。。。
  18. 18. ステートフルにするには、 Session管理理という⽅方法を使う
  19. 19. ステートフル ステートレス セッション管理
  20. 20. 話しかけてきたやつに、 印を付けておく セッション管理理⽅方法(1)
  21. 21. Res Req クライアント サーバ
  22. 22. Req クライアント サーバ
  23. 23. 初めてきた人だな。 クライアント サーバ
  24. 24. 次来たときは、   session_id=1と名乗ってもらおう。 クライアント サーバ
  25. 25. あと、この人の情報は   ここに保存しよう。 session_id  =  1 クライアント サーバ
  26. 26.    session_id  =  1 set_cookie(‘session_id’,  1) クライアント サーバ
  27. 27. session_id  =  1 session_id  =  1 cookie cookie…ブラウザにデータを保 存する仕組み   クライアント サーバ
  28. 28. session_id  =  1 session_id  =  1 cookie     Cookie:   session_id  =  1   post:   hoge=fuga     クライアント サーバ
  29. 29. hoge=fuga session_id  =  1 session_id  =  1 cookie hoge=huga  をsession情報という   クライアント サーバ
  30. 30. hoge=fuga session_id  =  1 session_id  =  1 cookie Res クライアント サーバ
  31. 31. hoge=fuga session_id  =  1 session_id  =  1 cookie クライアント サーバ
  32. 32. hoge=fuga session_id  =  1 session_id  =  1 cookie     Cookie:   session_id  =  1   post:   foo=bar     クライアント サーバ
  33. 33. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie クライアント サーバ
  34. 34. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie Res クライアント サーバ
  35. 35. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie クライアント サーバ
  36. 36. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie Req クライアント サーバ
  37. 37. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie 初めてきた人だな。(略) クライアント サーバ
  38. 38. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie session_id  =  2 クライアント サーバ
  39. 39. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie session_id  =  2 set_cookie(‘session_id’,  2) クライアント サーバ
  40. 40. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie session_id  =  2 session_id  =  2 cookie クライアント サーバ
  41. 41. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie session_id  =  2 session_id  =  2 cookie     Cookie:   session_id  =  2   post:   name=taichi     クライアント サーバ
  42. 42. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie name=taichi session_id  =  2 session_id  =  2 cookie クライアント サーバ
  43. 43. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie name=taichi session_id  =  2 session_id  =  2 cookie Res クライアント サーバ
  44. 44. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie name=taichi session_id  =  2 session_id  =  2 cookie クライアント サーバ
  45. 45. hoge=fuga,  foo=bar session_id  =  1 session_id  =  1 cookie name=taichi session_id  =  2 session_id  =  2 cookie     Cookie:   session_id  =  1   post:   name=inoue     クライアント サーバ
  46. 46. hoge=fuga,  foo=bar,   name=inoue session_id  =  1 session_id  =  1 cookie name=taichi session_id  =  2 session_id  =  2 cookie クライアント サーバ
  47. 47. こんな感じで保持している
  48. 48. 【注意】 クライアントはサーバからは ⾒見見えない
  49. 49. クライアントを隠してみると、 session_̲idの働きがより分かる
  50. 50. Req クライアント サーバ
  51. 51. session_id  =  1 クライアント サーバ
  52. 52. session_id  =  1 set_cookie(‘session_id’,  1) クライアント サーバ
  53. 53. session_id  =  1 クライアント サーバ
  54. 54. session_id  =  1     Cookie:   session_id  =  1   post:   hoge=fuga     クライアント サーバ
  55. 55. hoge=fuga session_id  =  1 クライアント サーバ
  56. 56. hoge=fuga session_id  =  1 Res クライアント サーバ
  57. 57. hoge=fuga session_id  =  1 クライアント サーバ
  58. 58. hoge=fuga session_id  =  1     Cookie:   session_id  =  1   post:   foo=bar     クライアント サーバ
  59. 59. hoge=fuga,  foo=bar session_id  =  1 クライアント サーバ
  60. 60. hoge=fuga,  foo=bar session_id  =  1 Res クライアント サーバ
  61. 61. hoge=fuga,  foo=bar session_id  =  1 クライアント サーバ
  62. 62. hoge=fuga,  foo=bar session_id  =  1 Req クライアント サーバ
  63. 63. hoge=fuga,  foo=bar session_id  =  1 session_id  =  2 クライアント サーバ
  64. 64. hoge=fuga,  foo=bar session_id  =  1 session_id  =  2 set_cookie(‘session_id’,  2) クライアント サーバ
  65. 65. hoge=fuga,  foo=bar session_id  =  1 session_id  =  2 クライアント サーバ
  66. 66. hoge=fuga,  foo=bar session_id  =  1 session_id  =  2     Cookie:   session_id  =  2   post:   name=taichi     クライアント サーバ
  67. 67. hoge=fuga,  foo=bar session_id  =  1 name=taichi session_id  =  2 クライアント サーバ
  68. 68. hoge=fuga,  foo=bar session_id  =  1 name=taichi session_id  =  2 Res クライアント サーバ
  69. 69. hoge=fuga,  foo=bar session_id  =  1 name=taichi session_id  =  2 クライアント サーバ
  70. 70. hoge=fuga,  foo=bar session_id  =  1 name=taichi session_id  =  2     Cookie:   session_id  =  1   post:   name=taichi     クライアント サーバ
  71. 71. hoge=fuga,  foo=bar,   name=inoue session_id  =  1 name=taichi session_id  =  2 クライアント サーバ
  72. 72. hoge=fuga,  foo=bar,   name=inoue session_id  =  1 name=taichi session_id  =  2 Res クライアント サーバ
  73. 73. hoge=fuga,  foo=bar,   name=inoue session_id  =  1 name=taichi session_id  =  2 クライアント サーバ
  74. 74. リクエストに含まれる session_̲idを頼りにして、 「誰がどういう状態か」 を保持している
  75. 75. 「誰がどういう状態か」 を保持する⽅方法は、 他にもある。
  76. 76. 情報を暗号化して、 クライアントに保持してもらう ※  Railsのcookie  storeの場合 セッション管理理⽅方法(2)
  77. 77. Res Req クライアント サーバ
  78. 78. Req クライアント サーバ
  79. 79. 初めて来た人だな。 クライアント サーバ
  80. 80. 次来たときは、   session_id=1と名乗ってもらおう。 クライアント サーバ
  81. 81. セッション情報は暗号化しておこう クライアント サーバ
  82. 82. session_id  =  1 Config/secrets.yml セッション情報 🔒セッション情報 暗号化 クライアント サーバ
  83. 83. set_cookie(  ‘ 🔒セッション情報’) クライアント サーバ
  84. 84. 🔒セッション情報 cookie クライアント サーバ
  85. 85. 🔒セッション情報 cookie     Cookie:   🔒セッション情報   post:   hoge=fuga     クライアント サーバ
  86. 86. 🔒セッション情報 cookie 🔒セッション情報 クライアント サーバ
  87. 87. 🔒セッション情報 cookie session_id  =  1 Config/secrets.yml セッション情報 🔒セッション情報 復号化 クライアント サーバ
  88. 88. 🔒セッション情報 cookie session_id  =  1 Config/secrets.yml セッション情報 🔒セッション情報 復号化 なるほど、さっきの人ね。 クライアント サーバ
  89. 89. session_id  =  1,  hoge=fuga セッション情報 情報追記 🔒セッション情報 cookie クライアント サーバ
  90. 90. session_id  =  1,  hoge=fuga Config/secrets.yml セッション情報 🔒セッション情報 再び暗号化 🔒セッション情報 cookie クライアント サーバ
  91. 91. set_cookie(  ‘ 🔒セッション情報’) セッション情報’) 🔒セッション情報 cookie クライアント サーバ
  92. 92. 🔒セッション情報 セッション情報 cookie セッション情報が更新される。 クライアント サーバ
  93. 93. 「誰がどういう状態か」は cookieが持っている
  94. 94. cookieが持っている session情報を復復号化して、 「誰がどういう状態か」 を把握している
  95. 95. まとめ
  96. 96. 誰がどのような状態か、 保持しておきたい時がある ↓ ステートフル
  97. 97. ステートレスをステートフルに する⽅方法 ↓ Session管理理
  98. 98. Session管理理する⽅方法 ↓ sessionやcookie
  99. 99. 終わり!

×