Successfully reported this slideshow.
Your SlideShare is downloading. ×

Differences between session and cookie and background of their creation

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 81 Ad

More Related Content

Recently uploaded (20)

Advertisement

Differences between session and cookie and background of their creation

  1. 1. 1 COOKIEとSESSIONの違い 技術的背景と問題点 2021.07.18 講義 in PHP勉強会
  2. 2. 本日の SUMMERLY 1. HTTPとREST 2. StateLessとStateFullの違い 3. StateFullの実現 -Cookieの誕生- 4. Cookieの問題点 5. Session・セッション管理 6. セッション管理の仕組み 7. まとめ 2
  3. 3. 本日の SUMMERLY 1.HTTPとREST 2. StateLessとStateFullの違い 3. StateFullの実現 -Cookieの誕生- 4. Cookieの問題点 5. Session・セッション管理 6. セッション管理の仕組み 7. まとめ 2
  4. 4. 1. HTTPとREST
  5. 5. HTTPは元々ファイル転送専用プロトコル
  6. 6. HTTPは元々ファイル転送専用プロトコル
  7. 7. HTTPは元々ファイル転送専用プロトコル HTMLやXMLなど ハイパーテキストのみの転送を行っていた
  8. 8. Architectural Style REST 定義:システムのアーキテクチャを決定する際の設計指針や制約  1. クライアント/サーバ    クライアントとサーバで通信のやりとり       2. ステートレスサーバ → ユーザの状態をサーバで管理しない  3. キャッシュ         サーバーとの通信回数を減らす  4. 統一インターフェース    通信のルールを統一  5. 階層化システム       システムを階層に分離  6. コードオンデマンド    プログラムをサーバからDLして実行 ex.
  9. 9. UniformInterface-Layered-CodeOnDemand-Client-Cache-StatelessServer 統一/階層化/コードオンデマンド/クライアント/キャッシュ/ステートレスサーバ クライアント ($) クライアント クライアント (cache) ステートレス サーバ ステートレス サーバ プロキシ レガシー システム UI担当 リクエスト毎に全情報送信 クライアントの セッション状態を 管理しない 同じリクエスト結果 を再利用する 全サーバが同一 インターフェース採用 インターフェースの異なるレガシーシステムと接続できる システムを複雑階層に分割 サーバ提供コードをクライアント上で実行 ex.JavaScript
  10. 10. 本日の SUMMERLY 1. HTTPとREST 2.StateLessと StateFullの違い 3. StateFullの実現 -Cookieの誕生- 4. Cookieの問題点 5. Session・セッション管理 6. セッション管理の仕組み 7. まとめ 2
  11. 11. 2. STATELESSと STATEFULLの違い
  12. 12. とあるマクド○ルドでの注文風景
  13. 13. とあるマクド○ルドでの注文風景
  14. 14. 何故?
  15. 15. HTTPはSTATELESSなプロトコル
  16. 16. HTTPはSTATELESSなプロトコル
  17. 17. HTTPはSTATELESSなプロトコル サーバがクライアントの ユーザ情報(状態)を保持しない • • • • • • • • • • • • •
  18. 18. STATELESSとは 誰がどの様な状態かを保持しない
  19. 19. STATELESS 前の通信を引き継がない 。1つの通信が独立。
  20. 20. STATEFULLとは??
  21. 21. STATEFULLとは?? ユーザがどの様な状態かを保持する
  22. 22. STATEFULL 前の通信を引き継ぐ。ポテトが注文されたことを認識する。
  23. 23. 1. COOKIE 2. SESSION StateFullを実現する方法 サーバが通信記録のある   クライアントを判別可能にする
  24. 24. 本日の SUMMERLY 1. HTTPとREST 2. StateLessとStateFullの違い 3.StateFullの実現 -Cookieの誕生- 4. Cookieの問題点 5. Session・セッション管理 6. セッション管理の仕組み 7. まとめ 2
  25. 25. 3. STATEFULL の実現 -COOKIEの誕生-
  26. 26. 1. HTTPは本来ファイル転送のためのプロトコル 実際はコンピュータの扱えるデータであれば何でも転送出来る(している) 2. HTTPはクライアント・サーバ間の通信状態を把握できない 3. 動的コンテンツを提供したいというニーズが生じる セッション状態に対応して異なるページを表示したい 4. HTTPだけでのセッション管理は欠点が幾つも有った URLに識別情報を含める方法でセッション管理など Cookieの誕生までの経緯
  27. 27. 1994年にネットスケープコミュニケーションズ社によっ てCOOKIE が提案・実装された。COOKIEでは次のよ うにサーバとクライアント間のSESSIONを管理する。
  28. 28. クライアント ($) WebClient WebServer クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  29. 29. クライアント ($) WebClient WebServer 初回HTTPリクエスト クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  30. 30. クライアント ($) WebClient WebServer 初回HTTPリクエスト ①cookieを 持っていな状態で リクエスト クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  31. 31. クライアント ($) WebClient WebServer 初回HTTPリクエスト ①cookieを 持っていな状態で リクエスト クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  32. 32. クライアント ($) WebClient WebServer 初回HTTPリクエスト ②通信状態を 格納したCookieを レスポンスする ①cookieを 持っていな状態で リクエスト クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  33. 33. クライアント ($) WebClient WebServer 初回HTTPリクエスト ③クライアントの ブラウザに cookieが保存される ②通信状態を 格納したCookieを レスポンスする ①cookieを 持っていな状態で リクエスト クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  34. 34. クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ③クライアントの ブラウザに cookieが保存される ②通信状態を 格納したCookieを レスポンスする ①cookieを 持っていな状態で リクエスト クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  35. 35. クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ③クライアントの ブラウザに cookieが保存される ②通信状態を 格納したCookieを レスポンスする ①cookieを 持っていな状態で リクエスト クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  36. 36. クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ③クライアントの ブラウザに cookieが保存される ②通信状態を 格納したCookieを レスポンスする ①cookieを 持っていな状態で リクエスト ④ブラウザがcookieを HTTPヘッダに格納し 通信をする クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  37. 37. クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ③クライアントの ブラウザに cookieが保存される ②通信状態を 格納したCookieを レスポンスする ①cookieを 持っていな状態で リクエスト ④ブラウザがcookieを HTTPヘッダに格納し 通信をする クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  38. 38. クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ③クライアントの ブラウザに cookieが保存される ②通信状態を 格納したCookieを レスポンスする ⑤受け取ったcookieから クライアントを判別し 関連した以前の 通信状態と関連させる ①cookieを 持っていな状態で リクエスト ④ブラウザがcookieを HTTPヘッダに格納し 通信をする クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  39. 39. クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ③クライアントの ブラウザに cookieが保存される ②通信状態を 格納したCookieを レスポンスする 動的コンテンツをHTTPレスポンス ⑤受け取ったcookieから クライアントを判別し 関連した以前の 通信状態と関連させる ①cookieを 持っていな状態で リクエスト ④ブラウザがcookieを HTTPヘッダに格納し 通信をする クッキーを用いたステートフルな通信の流れ 1. Cookieの実態はHTTPヘッダに格納できるテキストファイル 2. クライアントのブラウザに保存されるのが特徴
  40. 40. 1. WebサーバがWebブラウザにその状態を区別する識別子をHTTPヘッダに含める形でレスポンスする 2. ブラウザは次にそのサーバと通信する際に、与えられた識別子をHTTPヘッダに含めてリクエストする 3. サーバはその識別子を元にコンテンツの内容をユーザに合わせてカスタマイズし、ブラウザに渡す   必要があれば新たな識別子もHTTPヘッダに含める。 以降2、3の繰り返し。 HTTP cookie 引用元:https://ja.wikipedia.org/wiki/HTTP_cookie を多少編集
  41. 41. •ログイン •ショッピングカート •ゲームのスコア •またはその他のサーバーが覚えておくべきもの HTTP Cookie の使用 Cookie は主に、以下の用途で使用(セッション管理の場合) 引用元:https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies
  42. 42. HTTP Cookie:cookieの中身 引用元:infraexpert.com/study/tcpip16.6.html
  43. 43. 本日の SUMMERLY 1. HTTPとREST 2. StateLessとStateFullの違い 3. StateFullの実現 -Cookieの誕生- 4.Cookieの問題点 5. Session・セッション管理 6. セッション管理の仕組み 7. まとめ 2
  44. 44. 4. COOKIEの問題点
  45. 45. 1. 機密性の高い情報を通信する度にHTTPヘッダに設定 通信の度に情報漏洩の危険性 2. クライアント側で改竄可能 ツールを使えば閲覧・編集は簡単 3. ヘッダに持たせれる容量が少ない セットする値の長さが4096BYTE以上の場合は無視される Cookieの問題点
  46. 46. 本日の SUMMERLY 1. HTTPとREST 2. StateLessとStateFullの違い 3. StateFullの実現 -Cookieの誕生- 4. Cookieの問題点 5.Sessionとセッション 6. セッション管理の仕組み 7. まとめ 2
  47. 47. 5. SESSIONとセッション管理
  48. 48. ・通信接続を確立∼切断まで ・ログインからログアウトまで ・セッション = 一定期間の活動 ポイントは 一連 の流れ
  49. 49. この一連の流れの間は勿論
  50. 50. ステートフル ユーザの情報(状態)は保持
  51. 51. 概念としてのセッションは 状態を指します。
  52. 52. これをセッション状態、 もしくは アプリケーション状態と呼びます。
  53. 53. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient① WebServer WebClient② Session ID ユーザ ID ログイン 注文品 注文完了 218751ofi324 kato OK 米 ✔ 43298utjfoi2 gyaga OK —— —— —— —— —— —— —— —— —— —— Session ID 218751ofi324 Session ID 43298utjfoi2 Session ID 43298utjfoi2 Session ID 218751ofi324 Serverが管理するセッション状態
  54. 54. セッションを利用して セッション状態を管理することを セッション管理 と呼ぶ
  55. 55. 本日の SUMMERLY 1. HTTPとREST 2. StateLessとStateFullの違い 3. StateFullの実現 -Cookieの誕生- 4. Cookieの問題点 5. Session・セッション管理 6. セッション管理の仕組み 7. まとめ 2
  56. 56. 6. セッション管理の仕組み
  57. 57. 1. セッションはクライアントとサーバの通信状態をステートフルにする 2. サーバ側ではセッションID(あるセッションと紐付いたキー)とセッション(状態)を保存 セッションIDのみ何らかの手段でクライアントに渡す 1. クッキーを利用する方法 2. URLのクエリストリング 3. HIDDEN属性に渡す 3. セキュリティの観点から一般的にはクッキーを使うことが多い. Session
  58. 58. セッション状態の管理概要 必要な要件、実現するための条件 ・ユーザはSession IDを取得出来るような状態にする ・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信 ・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する ・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい ・複数ユーザが同時に使っていても個別にセッション状態を管理したい ・複数ユーザ使用中に、別のユーザ情報は見れないようにする 要 件 条 件
  59. 59. セッション状態の管理概要 必要な要件、実現するための条件 ・ユーザはSession IDを取得出来るような状態にする ・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信 ・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する ・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい ・複数ユーザが同時に使っていても個別にセッション状態を管理したい ・複数ユーザ使用中に、別のユーザ情報は見れないようにする 要 件 条 件
  60. 60. セッション状態の管理概要 必要な要件、実現するための条件 ・ユーザはSession IDを取得出来るような状態にする ・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信 ・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する ・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい ・複数ユーザが同時に使っていても個別にセッション状態を管理したい ・複数ユーザ使用中に、別のユーザ情報は見れないようにする 要 件 条 件
  61. 61. セッション状態の管理概要 必要な要件、実現するための条件 ・ユーザはSession IDを取得出来るような状態にする ・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信 ・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する ・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい ・複数ユーザが同時に使っていても個別にセッション状態を管理したい ・複数ユーザ使用中に、別のユーザ情報は見れないようにする 要 件 条 件
  62. 62. セッション状態の管理概要 必要な要件、実現するための条件 ・ユーザはSession IDを取得出来るような状態にする ・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信 ・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する ・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい ・複数ユーザが同時に使っていても個別にセッション状態を管理したい ・複数ユーザ使用中に、別のユーザ情報は見れないようにする 要 件 条 件
  63. 63. セッション状態の管理概要 必要な要件、実現するための条件 ・ユーザはSession IDを取得出来るような状態にする ・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信 ・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する ・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい ・複数ユーザが同時に使っていても個別にセッション状態を管理したい ・複数ユーザ使用中に、別のユーザ情報は見れないようにする 要 件 条 件
  64. 64. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer
  65. 65. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer ・Session IDを保存する場所がCookie ・Session IDを保持する場所がSession
  66. 66. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer 初回HTTPリクエスト
  67. 67. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer 初回HTTPリクエスト HTTPレスポンス
  68. 68. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer 初回HTTPリクエスト HTTPレスポンス
  69. 69. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer 初回HTTPリクエスト ①Serverから SessionIDを発行し Cookieに格納 HTTPレスポンス
  70. 70. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ①Serverから SessionIDを発行し Cookieに格納
  71. 71. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ②Session IDを 格納したCookieを Serverに返す ①Serverから SessionIDを発行し Cookieに格納
  72. 72. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ②Session IDを 格納したCookieを Serverに返す ①Serverから SessionIDを発行し Cookieに格納
  73. 73. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ③Cookieから Session IDを取り出し ユーザを判別 ②Session IDを 格納したCookieを Serverに返す ①Serverから SessionIDを発行し Cookieに格納
  74. 74. Webをセッション状態にする代表格はCookie型(他に3種ほど) Cookie型 = Cookie + Session ID + DB クライアント ($) WebClient WebServer 初回HTTPリクエスト 二回目以降HTTPリクエスト ②Session IDを 格納したCookieを Serverに返す ①Serverから SessionIDを発行し Cookieに格納 HTTPレスポンス ③Cookieから Session IDを取り出し ユーザを判別
  75. 75. 本日の SUMMERLY 1. HTTPとREST 2. StateLessとStateFullの違い 3. StateFullの実現 -Cookieの誕生- 4. Cookieの問題点 5. Session・セッション管理 6. セッション管理の仕組み 7.まとめ 2
  76. 76. 7. まとめ
  77. 77. 1. HTTPはステートフル → 元々ファイル転送の為のプロトコル ステートレスとは特定ユーザの一連の通信状態を把握していない 2. ステートフルにする方法はCOOKIEとSESSIONの2つ ステートフルとはセッション状態を保持し、それを管理できること 3. セッション状態とは特定ユーザの通信の確率∼切断間での行動履歴のようなもの セッション状態の保持はCOOKIEではHTTPヘッダで行い、SESSIONではサーバで行う 4. セッション管理とはセッション状態を管理すること 複数のHTTP通信と特定のユーザを紐付け、ステートレスなサーバがユーザを識別出来るようにする 5. COOKIEとSESSIONは明確に異なる SESSIONを用いたセッション管理において手段としてCOOKIEがある。SESSIONには技術と概念の二種類があるので混乱する 6. COOKIEはサーバがクライアントに識別子/ユーザ情報を保存しステートフルを実現する COOKIEはHTTPヘッダに格納できるテキストファイル → セキュリティに問題があるのでCOOKIEのみでは使用しない 7. SESSIONはセッションIDとセッション状態をサーバに保存してステートフルを実現する IDとセッション状態が紐づく。サーバはセッションID を何らかの方法でクライアントに渡す まとめ

×