SlideShare una empresa de Scribd logo
1 de 81
Descargar para leer sin conexión
1
COOKIEとSESSIONの違い
技術的背景と問題点
2021.07.18 講義 in PHP勉強会
本日の SUMMERLY
1. HTTPとREST
2. StateLessとStateFullの違い
3. StateFullの実現 -Cookieの誕生-
4. Cookieの問題点
5. Session・セッション管理
6. セッション管理の仕組み
7. まとめ
2
本日の SUMMERLY
1.HTTPとREST
2. StateLessとStateFullの違い
3. StateFullの実現 -Cookieの誕生-
4. Cookieの問題点
5. Session・セッション管理
6. セッション管理の仕組み
7. まとめ
2
1. HTTPとREST
HTTPは元々ファイル転送専用プロトコル
HTTPは元々ファイル転送専用プロトコル
HTTPは元々ファイル転送専用プロトコル
HTMLやXMLなど
ハイパーテキストのみの転送を行っていた
Architectural Style
REST
定義:システムのアーキテクチャを決定する際の設計指針や制約
 1.	クライアント/サーバ   		クライアントとサーバで通信のやりとり   	
 	
 2.	ステートレスサーバ	→	ユーザの状態をサーバで管理しない	
 3.	キャッシュ        	サーバーとの通信回数を減らす	
 4.	統一インターフェース  	 通信のルールを統一	
 5.	階層化システム      	システムを階層に分離	
 6.	コードオンデマンド   			プログラムをサーバからDLして実行
ex.
UniformInterface-Layered-CodeOnDemand-Client-Cache-StatelessServer
統一/階層化/コードオンデマンド/クライアント/キャッシュ/ステートレスサーバ
クライアント
($)
クライアント
クライアント
(cache)
ステートレス
サーバ
ステートレス
サーバ
プロキシ
レガシー
システム
UI担当
リクエスト毎に全情報送信
クライアントの
セッション状態を
管理しない
同じリクエスト結果
を再利用する
全サーバが同一
インターフェース採用
インターフェースの異なるレガシーシステムと接続できる
システムを複雑階層に分割
サーバ提供コードをクライアント上で実行
ex.JavaScript
本日の SUMMERLY
1. HTTPとREST
2.StateLessと
StateFullの違い
3. StateFullの実現 -Cookieの誕生-
4. Cookieの問題点
5. Session・セッション管理
6. セッション管理の仕組み
7. まとめ
2
2. STATELESSと
STATEFULLの違い
とあるマクド○ルドでの注文風景
とあるマクド○ルドでの注文風景
何故?
HTTPはSTATELESSなプロトコル
HTTPはSTATELESSなプロトコル
HTTPはSTATELESSなプロトコル
サーバがクライアントの
ユーザ情報(状態)を保持しない
• • • • • • • • • • • • •
STATELESSとは
誰がどの様な状態かを保持しない
STATELESS
前の通信を引き継がない 。1つの通信が独立。
STATEFULLとは??
STATEFULLとは??
ユーザがどの様な状態かを保持する
STATEFULL
前の通信を引き継ぐ。ポテトが注文されたことを認識する。
1. COOKIE
2. SESSION
StateFullを実現する方法
サーバが通信記録のある
  クライアントを判別可能にする
本日の SUMMERLY
1. HTTPとREST
2. StateLessとStateFullの違い
3.StateFullの実現
-Cookieの誕生-
4. Cookieの問題点
5. Session・セッション管理
6. セッション管理の仕組み
7. まとめ
2
3. STATEFULL の実現
-COOKIEの誕生-
1. HTTPは本来ファイル転送のためのプロトコル
実際はコンピュータの扱えるデータであれば何でも転送出来る(している)
2. HTTPはクライアント・サーバ間の通信状態を把握できない
3. 動的コンテンツを提供したいというニーズが生じる
セッション状態に対応して異なるページを表示したい
4. HTTPだけでのセッション管理は欠点が幾つも有った
URLに識別情報を含める方法でセッション管理など
Cookieの誕生までの経緯
1994年にネットスケープコミュニケーションズ社によっ
てCOOKIE が提案・実装された。COOKIEでは次のよ
うにサーバとクライアント間のSESSIONを管理する。
クライアント
($)
WebClient
WebServer
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
①cookieを
持っていな状態で
リクエスト
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
①cookieを
持っていな状態で
リクエスト
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
②通信状態を
格納したCookieを
レスポンスする
①cookieを
持っていな状態で
リクエスト
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
③クライアントの
ブラウザに
cookieが保存される
②通信状態を
格納したCookieを
レスポンスする
①cookieを
持っていな状態で
リクエスト
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
③クライアントの
ブラウザに
cookieが保存される
②通信状態を
格納したCookieを
レスポンスする
①cookieを
持っていな状態で
リクエスト
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
③クライアントの
ブラウザに
cookieが保存される
②通信状態を
格納したCookieを
レスポンスする
①cookieを
持っていな状態で
リクエスト
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
③クライアントの
ブラウザに
cookieが保存される
②通信状態を
格納したCookieを
レスポンスする
①cookieを
持っていな状態で
リクエスト
④ブラウザがcookieを
HTTPヘッダに格納し
通信をする
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
③クライアントの
ブラウザに
cookieが保存される
②通信状態を
格納したCookieを
レスポンスする
①cookieを
持っていな状態で
リクエスト
④ブラウザがcookieを
HTTPヘッダに格納し
通信をする
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
③クライアントの
ブラウザに
cookieが保存される
②通信状態を
格納したCookieを
レスポンスする
⑤受け取ったcookieから
クライアントを判別し
関連した以前の
通信状態と関連させる
①cookieを
持っていな状態で
リクエスト
④ブラウザがcookieを
HTTPヘッダに格納し
通信をする
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
③クライアントの
ブラウザに
cookieが保存される
②通信状態を
格納したCookieを
レスポンスする
動的コンテンツをHTTPレスポンス
⑤受け取ったcookieから
クライアントを判別し
関連した以前の
通信状態と関連させる
①cookieを
持っていな状態で
リクエスト
④ブラウザがcookieを
HTTPヘッダに格納し
通信をする
クッキーを用いたステートフルな通信の流れ
1. Cookieの実態はHTTPヘッダに格納できるテキストファイル
2. クライアントのブラウザに保存されるのが特徴
1. WebサーバがWebブラウザにその状態を区別する識別子をHTTPヘッダに含める形でレスポンスする
2. ブラウザは次にそのサーバと通信する際に、与えられた識別子をHTTPヘッダに含めてリクエストする
3. サーバはその識別子を元にコンテンツの内容をユーザに合わせてカスタマイズし、ブラウザに渡す
  必要があれば新たな識別子もHTTPヘッダに含める。
以降2、3の繰り返し。
HTTP cookie
引用元:https://ja.wikipedia.org/wiki/HTTP_cookie を多少編集
•ログイン
•ショッピングカート
•ゲームのスコア
•またはその他のサーバーが覚えておくべきもの
HTTP Cookie の使用
Cookie は主に、以下の用途で使用(セッション管理の場合)
引用元:https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies
HTTP Cookie:cookieの中身
引用元:infraexpert.com/study/tcpip16.6.html
本日の SUMMERLY
1. HTTPとREST
2. StateLessとStateFullの違い
3. StateFullの実現 -Cookieの誕生-
4.Cookieの問題点
5. Session・セッション管理
6. セッション管理の仕組み
7. まとめ
2
4. COOKIEの問題点
1. 機密性の高い情報を通信する度にHTTPヘッダに設定
通信の度に情報漏洩の危険性
2. クライアント側で改竄可能
ツールを使えば閲覧・編集は簡単
3. ヘッダに持たせれる容量が少ない
セットする値の長さが4096BYTE以上の場合は無視される
Cookieの問題点
本日の SUMMERLY
1. HTTPとREST
2. StateLessとStateFullの違い
3. StateFullの実現 -Cookieの誕生-
4. Cookieの問題点
5.Sessionとセッション
6. セッション管理の仕組み
7. まとめ
2
5. SESSIONとセッション管理
・通信接続を確立∼切断まで
・ログインからログアウトまで
・セッション = 一定期間の活動
ポイントは 一連 の流れ
この一連の流れの間は勿論
ステートフル
ユーザの情報(状態)は保持
概念としてのセッションは
状態を指します。
これをセッション状態、
もしくは
アプリケーション状態と呼びます。
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が管理するセッション状態
セッションを利用して
セッション状態を管理することを
セッション管理 と呼ぶ
本日の SUMMERLY
1. HTTPとREST
2. StateLessとStateFullの違い
3. StateFullの実現 -Cookieの誕生-
4. Cookieの問題点
5. Session・セッション管理
6. セッション管理の仕組み
7. まとめ
2
6. セッション管理の仕組み
1. セッションはクライアントとサーバの通信状態をステートフルにする
2. サーバ側ではセッションID(あるセッションと紐付いたキー)とセッション(状態)を保存
セッションIDのみ何らかの手段でクライアントに渡す
1. クッキーを利用する方法
2. URLのクエリストリング
3. HIDDEN属性に渡す
3. セキュリティの観点から一般的にはクッキーを使うことが多い.
Session
セッション状態の管理概要
必要な要件、実現するための条件
・ユーザはSession IDを取得出来るような状態にする
・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信
・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する
・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい
・複数ユーザが同時に使っていても個別にセッション状態を管理したい
・複数ユーザ使用中に、別のユーザ情報は見れないようにする
要
件
条
件
セッション状態の管理概要
必要な要件、実現するための条件
・ユーザはSession IDを取得出来るような状態にする
・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信
・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する
・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい
・複数ユーザが同時に使っていても個別にセッション状態を管理したい
・複数ユーザ使用中に、別のユーザ情報は見れないようにする
要
件
条
件
セッション状態の管理概要
必要な要件、実現するための条件
・ユーザはSession IDを取得出来るような状態にする
・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信
・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する
・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい
・複数ユーザが同時に使っていても個別にセッション状態を管理したい
・複数ユーザ使用中に、別のユーザ情報は見れないようにする
要
件
条
件
セッション状態の管理概要
必要な要件、実現するための条件
・ユーザはSession IDを取得出来るような状態にする
・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信
・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する
・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい
・複数ユーザが同時に使っていても個別にセッション状態を管理したい
・複数ユーザ使用中に、別のユーザ情報は見れないようにする
要
件
条
件
セッション状態の管理概要
必要な要件、実現するための条件
・ユーザはSession IDを取得出来るような状態にする
・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信
・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する
・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい
・複数ユーザが同時に使っていても個別にセッション状態を管理したい
・複数ユーザ使用中に、別のユーザ情報は見れないようにする
要
件
条
件
セッション状態の管理概要
必要な要件、実現するための条件
・ユーザはSession IDを取得出来るような状態にする
・ユーザは毎回HTTPリクエスト時にSession IDを付与しServerに送信
・ServerはHTTPリクエストに付与されたSession IDを見て、ユーザを判別する
・複数ユーザからのリクエスト時でも同じユーザからのリクエストを判別したい
・複数ユーザが同時に使っていても個別にセッション状態を管理したい
・複数ユーザ使用中に、別のユーザ情報は見れないようにする
要
件
条
件
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
・Session IDを保存する場所がCookie
・Session IDを保持する場所がSession
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
HTTPレスポンス
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
HTTPレスポンス
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
①Serverから
SessionIDを発行し
Cookieに格納
HTTPレスポンス
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
①Serverから
SessionIDを発行し
Cookieに格納
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
②Session IDを
格納したCookieを
Serverに返す
①Serverから
SessionIDを発行し
Cookieに格納
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
②Session IDを
格納したCookieを
Serverに返す
①Serverから
SessionIDを発行し
Cookieに格納
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
③Cookieから
Session IDを取り出し
ユーザを判別
②Session IDを
格納したCookieを
Serverに返す
①Serverから
SessionIDを発行し
Cookieに格納
Webをセッション状態にする代表格はCookie型(他に3種ほど)
Cookie型 = Cookie + Session ID + DB
クライアント
($)
WebClient
WebServer
初回HTTPリクエスト
二回目以降HTTPリクエスト
②Session IDを
格納したCookieを
Serverに返す
①Serverから
SessionIDを発行し
Cookieに格納
HTTPレスポンス
③Cookieから
Session IDを取り出し
ユーザを判別
本日の SUMMERLY
1. HTTPとREST
2. StateLessとStateFullの違い
3. StateFullの実現 -Cookieの誕生-
4. Cookieの問題点
5. Session・セッション管理
6. セッション管理の仕組み
7.まとめ
2
7. まとめ
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 を何らかの方法でクライアントに渡す
まとめ

Más contenido relacionado

Más de yoshitaro yoyo

入社一発目で激烈炎上案件にテスターとして参加して得た気付き
入社一発目で激烈炎上案件にテスターとして参加して得た気付き入社一発目で激烈炎上案件にテスターとして参加して得た気付き
入社一発目で激烈炎上案件にテスターとして参加して得た気付きyoshitaro yoyo
 
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
 3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ- 3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-yoshitaro yoyo
 
Laravelの検索機能の実装方法
Laravelの検索機能の実装方法Laravelの検索機能の実装方法
Laravelの検索機能の実装方法yoshitaro yoyo
 
A brief overview of recent learnings.pdf
A brief overview of recent learnings.pdfA brief overview of recent learnings.pdf
A brief overview of recent learnings.pdfyoshitaro yoyo
 
Introduction to Design Patterns_and_Object_Orientation.pdf
Introduction to Design Patterns_and_Object_Orientation.pdfIntroduction to Design Patterns_and_Object_Orientation.pdf
Introduction to Design Patterns_and_Object_Orientation.pdfyoshitaro yoyo
 
Recommendation of challenge.pdf
Recommendation of challenge.pdfRecommendation of challenge.pdf
Recommendation of challenge.pdfyoshitaro yoyo
 
Transaction description how to use it in laravel
Transaction description  how to use it in laravelTransaction description  how to use it in laravel
Transaction description how to use it in laravelyoshitaro yoyo
 
RESTful Web Application by Laravel
RESTful Web Application by  LaravelRESTful Web Application by  Laravel
RESTful Web Application by Laravelyoshitaro yoyo
 
Ymbal expart.php.2ndtermstudent.finalpresentation
Ymbal expart.php.2ndtermstudent.finalpresentationYmbal expart.php.2ndtermstudent.finalpresentation
Ymbal expart.php.2ndtermstudent.finalpresentationyoshitaro yoyo
 

Más de yoshitaro yoyo (9)

入社一発目で激烈炎上案件にテスターとして参加して得た気付き
入社一発目で激烈炎上案件にテスターとして参加して得た気付き入社一発目で激烈炎上案件にテスターとして参加して得た気付き
入社一発目で激烈炎上案件にテスターとして参加して得た気付き
 
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
 3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ- 3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
 
Laravelの検索機能の実装方法
Laravelの検索機能の実装方法Laravelの検索機能の実装方法
Laravelの検索機能の実装方法
 
A brief overview of recent learnings.pdf
A brief overview of recent learnings.pdfA brief overview of recent learnings.pdf
A brief overview of recent learnings.pdf
 
Introduction to Design Patterns_and_Object_Orientation.pdf
Introduction to Design Patterns_and_Object_Orientation.pdfIntroduction to Design Patterns_and_Object_Orientation.pdf
Introduction to Design Patterns_and_Object_Orientation.pdf
 
Recommendation of challenge.pdf
Recommendation of challenge.pdfRecommendation of challenge.pdf
Recommendation of challenge.pdf
 
Transaction description how to use it in laravel
Transaction description  how to use it in laravelTransaction description  how to use it in laravel
Transaction description how to use it in laravel
 
RESTful Web Application by Laravel
RESTful Web Application by  LaravelRESTful Web Application by  Laravel
RESTful Web Application by Laravel
 
Ymbal expart.php.2ndtermstudent.finalpresentation
Ymbal expart.php.2ndtermstudent.finalpresentationYmbal expart.php.2ndtermstudent.finalpresentation
Ymbal expart.php.2ndtermstudent.finalpresentation
 

Differences between session and cookie and background of their creation