Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SessionとCookieの違いと誕生の背景

 SessionとCookieの違いと誕生の背景

SessionとCookieの違いと誕生の背景

よしたろう

August 13, 2021
Tweet

More Decks by よしたろう

Other Decks in Programming

Transcript

  1. Architectural Style REST ఆٛɿγεςϜͷΞʔΩςΫνϟΛܾఆ͢Δࡍͷઃܭࢦ਑΍੍໿ ɹ1. ΫϥΠΞϯτ/αʔόɹɹɹ ΫϥΠΞϯτͱαʔόͰ௨৴ͷ΍ΓͱΓɹɹɹ ɹ ɹ2. εςʔτϨεαʔό

    → Ϣʔβͷঢ়ଶΛαʔόͰ؅ཧ͠ͳ͍ ɹ3. Ωϟογϡɹɹɹɹɹɹɹɹ αʔόʔͱͷ௨৴ճ਺ΛݮΒ͢ ɹ4. ౷ҰΠϯλʔϑΣʔεɹɹ ɹ௨৴ͷϧʔϧΛ౷Ұ ɹ5. ֊૚ԽγεςϜɹɹɹɹɹɹ γεςϜΛ֊૚ʹ෼཭ ɹ6. ίʔυΦϯσϚϯυɹɹɹ ϓϩάϥϜΛαʔό͔ΒDL࣮ͯ͠ߦ ex.
  2. UniformInterface-Layered-CodeOnDemand-Client-Cache-StatelessServer ౷Ұ/֊૚Խ/ίʔυΦϯσϚϯυ/ΫϥΠΞϯτ/Ωϟογϡ/εςʔτϨεαʔό ΫϥΠΞϯτ ʢˈʣ ΫϥΠΞϯτ ΫϥΠΞϯτ ʢcacheʣ εςʔτϨε αʔό εςʔτϨε

    αʔό ϓϩΩγ ϨΨγʔ γεςϜ UI୲౰ ϦΫΤετຖʹશ৘ใૹ৴ ΫϥΠΞϯτͷ ηογϣϯঢ়ଶΛ ؅ཧ͠ͳ͍ ಉ͡ϦΫΤετ݁Ռ Λ࠶ར༻͢Δ શαʔό͕ಉҰ ΠϯλʔϑΣʔε࠾༻ ΠϯλʔϑΣʔεͷҟͳΔϨΨγʔγεςϜͱ઀ଓͰ͖Δ γεςϜΛෳࡶ֊૚ʹ෼ׂ αʔόఏڙίʔυΛΫϥΠΞϯτ্Ͱ࣮ߦ ex.JavaScript
  3. ΫϥΠΞϯτ ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ᶃcookieΛ ͍࣋ͬͯͳঢ়ଶͰ ϦΫΤετ ΫοΩʔΛ༻͍ͨεςʔτϑϧͳ௨৴ͷྲྀΕ 1.

    Cookieͷ࣮ଶ͸HTTPϔομʹ֨ೲͰ͖ΔςΩετϑΝΠϧ 2. ΫϥΠΞϯτͷϒϥ΢βʹอଘ͞ΕΔͷ͕ಛ௃
  4. ΫϥΠΞϯτ ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ᶃcookieΛ ͍࣋ͬͯͳঢ়ଶͰ ϦΫΤετ ΫοΩʔΛ༻͍ͨεςʔτϑϧͳ௨৴ͷྲྀΕ 1.

    Cookieͷ࣮ଶ͸HTTPϔομʹ֨ೲͰ͖ΔςΩετϑΝΠϧ 2. ΫϥΠΞϯτͷϒϥ΢βʹอଘ͞ΕΔͷ͕ಛ௃
  5. ΫϥΠΞϯτ ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ᶄ௨৴ঢ়ଶΛ ֨ೲͨ͠CookieΛ Ϩεϙϯε͢Δ ᶃcookieΛ ͍࣋ͬͯͳঢ়ଶͰ

    ϦΫΤετ ΫοΩʔΛ༻͍ͨεςʔτϑϧͳ௨৴ͷྲྀΕ 1. Cookieͷ࣮ଶ͸HTTPϔομʹ֨ೲͰ͖ΔςΩετϑΝΠϧ 2. ΫϥΠΞϯτͷϒϥ΢βʹอଘ͞ΕΔͷ͕ಛ௃
  6. ΫϥΠΞϯτ ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ᶅΫϥΠΞϯτͷ ϒϥ΢βʹ cookie͕อଘ͞ΕΔ ᶄ௨৴ঢ়ଶΛ ֨ೲͨ͠CookieΛ

    Ϩεϙϯε͢Δ ᶃcookieΛ ͍࣋ͬͯͳঢ়ଶͰ ϦΫΤετ ΫοΩʔΛ༻͍ͨεςʔτϑϧͳ௨৴ͷྲྀΕ 1. Cookieͷ࣮ଶ͸HTTPϔομʹ֨ೲͰ͖ΔςΩετϑΝΠϧ 2. ΫϥΠΞϯτͷϒϥ΢βʹอଘ͞ΕΔͷ͕ಛ௃
  7. ΫϥΠΞϯτ ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶅΫϥΠΞϯτͷ ϒϥ΢βʹ cookie͕อଘ͞ΕΔ ᶄ௨৴ঢ়ଶΛ

    ֨ೲͨ͠CookieΛ Ϩεϙϯε͢Δ ᶃcookieΛ ͍࣋ͬͯͳঢ়ଶͰ ϦΫΤετ ΫοΩʔΛ༻͍ͨεςʔτϑϧͳ௨৴ͷྲྀΕ 1. Cookieͷ࣮ଶ͸HTTPϔομʹ֨ೲͰ͖ΔςΩετϑΝΠϧ 2. ΫϥΠΞϯτͷϒϥ΢βʹอଘ͞ΕΔͷ͕ಛ௃
  8. ΫϥΠΞϯτ ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶅΫϥΠΞϯτͷ ϒϥ΢βʹ cookie͕อଘ͞ΕΔ ᶄ௨৴ঢ়ଶΛ

    ֨ೲͨ͠CookieΛ Ϩεϙϯε͢Δ ᶃcookieΛ ͍࣋ͬͯͳঢ়ଶͰ ϦΫΤετ ΫοΩʔΛ༻͍ͨεςʔτϑϧͳ௨৴ͷྲྀΕ 1. Cookieͷ࣮ଶ͸HTTPϔομʹ֨ೲͰ͖ΔςΩετϑΝΠϧ 2. ΫϥΠΞϯτͷϒϥ΢βʹอଘ͞ΕΔͷ͕ಛ௃
  9. ΫϥΠΞϯτ ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶅΫϥΠΞϯτͷ ϒϥ΢βʹ cookie͕อଘ͞ΕΔ ᶄ௨৴ঢ়ଶΛ

    ֨ೲͨ͠CookieΛ Ϩεϙϯε͢Δ ᶃcookieΛ ͍࣋ͬͯͳঢ়ଶͰ ϦΫΤετ ᶆϒϥ΢β͕cookieΛ HTTPϔομʹ֨ೲ͠ ௨৴Λ͢Δ ΫοΩʔΛ༻͍ͨεςʔτϑϧͳ௨৴ͷྲྀΕ 1. Cookieͷ࣮ଶ͸HTTPϔομʹ֨ೲͰ͖ΔςΩετϑΝΠϧ 2. ΫϥΠΞϯτͷϒϥ΢βʹอଘ͞ΕΔͷ͕ಛ௃
  10. ΫϥΠΞϯτ ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶅΫϥΠΞϯτͷ ϒϥ΢βʹ cookie͕อଘ͞ΕΔ ᶄ௨৴ঢ়ଶΛ

    ֨ೲͨ͠CookieΛ Ϩεϙϯε͢Δ ᶃcookieΛ ͍࣋ͬͯͳঢ়ଶͰ ϦΫΤετ ᶆϒϥ΢β͕cookieΛ HTTPϔομʹ֨ೲ͠ ௨৴Λ͢Δ ΫοΩʔΛ༻͍ͨεςʔτϑϧͳ௨৴ͷྲྀΕ 1. Cookieͷ࣮ଶ͸HTTPϔομʹ֨ೲͰ͖ΔςΩετϑΝΠϧ 2. ΫϥΠΞϯτͷϒϥ΢βʹอଘ͞ΕΔͷ͕ಛ௃
  11. ΫϥΠΞϯτ ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶅΫϥΠΞϯτͷ ϒϥ΢βʹ cookie͕อଘ͞ΕΔ ᶄ௨৴ঢ়ଶΛ

    ֨ೲͨ͠CookieΛ Ϩεϙϯε͢Δ ᶇड͚औͬͨcookie͔Β ΫϥΠΞϯτΛ൑ผ͠ ؔ࿈ͨ͠Ҏલͷ ௨৴ঢ়ଶͱؔ࿈ͤ͞Δ ᶃcookieΛ ͍࣋ͬͯͳঢ়ଶͰ ϦΫΤετ ᶆϒϥ΢β͕cookieΛ HTTPϔομʹ֨ೲ͠ ௨৴Λ͢Δ ΫοΩʔΛ༻͍ͨεςʔτϑϧͳ௨৴ͷྲྀΕ 1. Cookieͷ࣮ଶ͸HTTPϔομʹ֨ೲͰ͖ΔςΩετϑΝΠϧ 2. ΫϥΠΞϯτͷϒϥ΢βʹอଘ͞ΕΔͷ͕ಛ௃
  12. ΫϥΠΞϯτ ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶅΫϥΠΞϯτͷ ϒϥ΢βʹ cookie͕อଘ͞ΕΔ ᶄ௨৴ঢ়ଶΛ

    ֨ೲͨ͠CookieΛ Ϩεϙϯε͢Δ ಈతίϯςϯπΛHTTPϨεϙϯε ᶇड͚औͬͨcookie͔Β ΫϥΠΞϯτΛ൑ผ͠ ؔ࿈ͨ͠Ҏલͷ ௨৴ঢ়ଶͱؔ࿈ͤ͞Δ ᶃcookieΛ ͍࣋ͬͯͳঢ়ଶͰ ϦΫΤετ ᶆϒϥ΢β͕cookieΛ HTTPϔομʹ֨ೲ͠ ௨৴Λ͢Δ ΫοΩʔΛ༻͍ͨεςʔτϑϧͳ௨৴ͷྲྀΕ 1. Cookieͷ࣮ଶ͸HTTPϔομʹ֨ೲͰ͖ΔςΩετϑΝΠϧ 2. ΫϥΠΞϯτͷϒϥ΢βʹอଘ͞ΕΔͷ͕ಛ௃
  13. WebΛηογϣϯঢ়ଶʹ͢Δ୅ද֨͸Cookieܕʢଞʹ3छ΄Ͳʣ Cookieܕ = Cookie + Session ID + DB ΫϥΠΞϯτ

    ʢˈʣ WebClientᶃ WebServer WebClientᶄ Session ID Ϣʔβ ID ϩάΠϯ ஫จ඼ ஫จ׬ྃ 218751o f i324 kato OK ถ ✔ 43298utjfoi2 gyaga OK —— —— —— —— —— —— —— —— —— —— Session ID 218751o f i324 Session ID 43298utjfoi2 Session ID 43298utjfoi2 Session ID 218751o f i324 Server͕؅ཧ͢Δηογϣϯঢ়ଶ
  14. WebΛηογϣϯঢ়ଶʹ͢Δ୅ද֨͸Cookieܕʢଞʹ3छ΄Ͳʣ Cookieܕ = Cookie + Session ID + DB ΫϥΠΞϯτ

    ʢˈʣ WebClient WebServer ɾSession IDΛอଘ͢Δ৔ॴ͕Cookie ɾSession IDΛอ࣋͢Δ৔ॴ͕Session
  15. WebΛηογϣϯঢ়ଶʹ͢Δ୅ද֨͸Cookieܕʢଞʹ3छ΄Ͳʣ Cookieܕ = Cookie + Session ID + DB ΫϥΠΞϯτ

    ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ᶃServer͔Β SessionIDΛൃߦ͠ Cookieʹ֨ೲ HTTPϨεϙϯε
  16. WebΛηογϣϯঢ়ଶʹ͢Δ୅ද֨͸Cookieܕʢଞʹ3छ΄Ͳʣ Cookieܕ = Cookie + Session ID + DB ΫϥΠΞϯτ

    ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶃServer͔Β SessionIDΛൃߦ͠ Cookieʹ֨ೲ
  17. WebΛηογϣϯঢ়ଶʹ͢Δ୅ද֨͸Cookieܕʢଞʹ3छ΄Ͳʣ Cookieܕ = Cookie + Session ID + DB ΫϥΠΞϯτ

    ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶄSession IDΛ ֨ೲͨ͠CookieΛ Serverʹฦ͢ ᶃServer͔Β SessionIDΛൃߦ͠ Cookieʹ֨ೲ
  18. WebΛηογϣϯঢ়ଶʹ͢Δ୅ද֨͸Cookieܕʢଞʹ3छ΄Ͳʣ Cookieܕ = Cookie + Session ID + DB ΫϥΠΞϯτ

    ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶄSession IDΛ ֨ೲͨ͠CookieΛ Serverʹฦ͢ ᶃServer͔Β SessionIDΛൃߦ͠ Cookieʹ֨ೲ
  19. WebΛηογϣϯঢ়ଶʹ͢Δ୅ද֨͸Cookieܕʢଞʹ3छ΄Ͳʣ Cookieܕ = Cookie + Session ID + DB ΫϥΠΞϯτ

    ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶅCookie͔Β Session IDΛऔΓग़͠ ϢʔβΛ൑ผ ᶄSession IDΛ ֨ೲͨ͠CookieΛ Serverʹฦ͢ ᶃServer͔Β SessionIDΛൃߦ͠ Cookieʹ֨ೲ
  20. WebΛηογϣϯঢ়ଶʹ͢Δ୅ද֨͸Cookieܕʢଞʹ3छ΄Ͳʣ Cookieܕ = Cookie + Session ID + DB ΫϥΠΞϯτ

    ʢˈʣ WebClient WebServer ॳճHTTPϦΫΤετ ೋճ໨Ҏ߱HTTPϦΫΤετ ᶄSession IDΛ ֨ೲͨ͠CookieΛ Serverʹฦ͢ ᶃServer͔Β SessionIDΛൃߦ͠ Cookieʹ֨ೲ HTTPϨεϙϯε ᶅCookie͔Β Session IDΛऔΓग़͠ ϢʔβΛ൑ผ
  21. 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 ΛԿΒ͔ͷํ๏ͰΫϥΠΞϯτʹ౉͢ ·ͱΊ