SlideShare a Scribd company logo
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の違い
とあるマクド○ルドでの注文風景
とあるマクド○ルドでの注文風景
Differences between session and cookie and background of their creation
Differences between session and cookie and background of their creation
何故?
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. クライアントのブラウザに保存されるのが特徴
Differences between session and cookie and background of their creation
Differences between session and cookie and background of their creation
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 を何らかの方法でクライアントに渡す
まとめ

More Related Content

PDF
CRUD Operations Development
PDF
Metodologia orientado a objetos
PDF
Laravel Design Patterns
PPTX
Laravel Eloquent ORM
PPT
Apresentação programação orientada à objetos
PPT
Diccionario de datos luis
PPTX
Analyzing Cyber-Attacks: In-Depth Report on Five Affected Organizations
PDF
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
CRUD Operations Development
Metodologia orientado a objetos
Laravel Design Patterns
Laravel Eloquent ORM
Apresentação programação orientada à objetos
Diccionario de datos luis
Analyzing Cyber-Attacks: In-Depth Report on Five Affected Organizations
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)

What's hot (20)

PDF
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
PDF
Hexagonal architecture in PHP
PDF
Understanding Windows Access Token Manipulation
PPTX
ElasticSearch : Architecture et Développement
PPTX
Diccionario de datos
PDF
Estrutura de Dados Apoio (Tabela Hash)
PDF
Database migrations with Flyway and Liquibase
PDF
Insertion Sort
ODP
PPTX
Stored Procedures and Triggers
PDF
Servlets que manejan datos de formularios HTML
PDF
Flask With Server-Sent Event
PPT
Presentation Spring
PPTX
Ejercicios resueltos de entidad relacion erwin
PDF
스프링 부트와 로깅
PPT
Codeigniter
PDF
123507620 que-es-la-evaluacion-perezosa-docx
PDF
Nodejs - A performance que eu sempre quis ter
PDF
Hunting for Credentials Dumping in Windows Environment
PDF
How to identify and prevent SQL injection
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
Hexagonal architecture in PHP
Understanding Windows Access Token Manipulation
ElasticSearch : Architecture et Développement
Diccionario de datos
Estrutura de Dados Apoio (Tabela Hash)
Database migrations with Flyway and Liquibase
Insertion Sort
Stored Procedures and Triggers
Servlets que manejan datos de formularios HTML
Flask With Server-Sent Event
Presentation Spring
Ejercicios resueltos de entidad relacion erwin
스프링 부트와 로깅
Codeigniter
123507620 que-es-la-evaluacion-perezosa-docx
Nodejs - A performance que eu sempre quis ter
Hunting for Credentials Dumping in Windows Environment
How to identify and prevent SQL injection
Ad

Similar to Differences between session and cookie and background of their creation (8)

PDF
HTML5など社内勉強会 Vol.8 - WebSocket
PDF
HTTP入門
PDF
第1回 松本勉強会 2012 05 11 - 公開版
PPTX
Myfirst cloudfoundry intro_20161201
PDF
Cld002 windows server_2016_で作るシンプ
PDF
これから利用拡大?WebSocket
PDF
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
PDF
Web packaging IETF 側
HTML5など社内勉強会 Vol.8 - WebSocket
HTTP入門
第1回 松本勉強会 2012 05 11 - 公開版
Myfirst cloudfoundry intro_20161201
Cld002 windows server_2016_で作るシンプ
これから利用拡大?WebSocket
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
Web packaging IETF 側
Ad

More from yoshitaro yoyo (9)

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

Differences between session and cookie and background of their creation