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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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

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

Avatar for よしたろう

よしたろう

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 ΛԿΒ͔ͷํ๏ͰΫϥΠΞϯτʹ౉͢ ·ͱΊ