SlideShare ist ein Scribd-Unternehmen logo
1 von 99
Downloaden Sie, um offline zu lesen
@carotene4035
session管理理
前の通信は引き継がない
ステートレス
いい感じにわかりやすいステートレスの例例
ポテトください
いい感じにわかりやすいステートレスの例例
かしこまりました
いい感じにわかりやすいステートレスの例例
Mサイズで
いい感じにわかりやすいステートレスの例例
何の話?
いい感じにわかりやすいステートレスの例例
かしこまりました	
ポテトください	
何の話?	
Mサイズで
いい感じにわかりやすいステートレスの例例
かしこまりました	
ポテトください	
何の話?	
Mサイズで	
ステートレスでは
前の通信は引き継がない
いい感じにわかりやすいステートレスの例例
かしこまりました	
ポテトください	
何の話?	
Mサイズで	
前の通信内容の	
  
「ポテトください」はもう無い	
  
	
  
だから話が通じない	
  
前の通信は引き継がない
↓
誰がどういう状態かを保持しない
ステートレス
前の通信を引き継ぐ
ステートフル
いい感じにわかりやすいステートフルの例例
ポテトください
いい感じにわかりやすいステートフルの例例
かしこまりました	
ポテト
いい感じにわかりやすいステートフルの例例
Mサイズで	
ポテト
いい感じにわかりやすいステートフルの例例
680円です。	
ポテト	
Mサイズ
前の通信を引き継ぐ
↓
誰がどういう状態かを保持できる
ステートフル
ステートフルじゃないと
困る時がある
ネットショップ、
ログイン管理理等。。。
ステートフルにするには、
Session管理理という⽅方法を使う
ステートフル
ステートレス
セッション管理
話しかけてきたやつに、
印を付けておく
セッション管理理⽅方法(1)
Res	
Req	
クライアント サーバ
Req	
クライアント サーバ
初めてきた人だな。	
クライアント サーバ
次来たときは、	
  
session_id=1と名乗ってもらおう。	
クライアント サーバ
あと、この人の情報は	
  
ここに保存しよう。	
session_id	
  =	
  1	
クライアント サーバ
  	
session_id	
  =	
  1	
set_cookie(‘session_id’,	
  1)	
クライアント サーバ
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
cookie…ブラウザにデータを保
存する仕組み	
  
クライアント サーバ
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
	
  
	
  
Cookie:	
  
session_id	
  =	
  1	
  
post:	
  
hoge=fuga	
  
	
  
	
クライアント サーバ
hoge=fuga	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
hoge=huga	
  をsession情報という	
  
クライアント サーバ
hoge=fuga	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
Res	
クライアント サーバ
hoge=fuga	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
クライアント サーバ
hoge=fuga	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
	
  
	
  
Cookie:	
  
session_id	
  =	
  1	
  
post:	
  
foo=bar	
  
	
  
	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
Res	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
Req	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
初めてきた人だな。(略)	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
session_id	
  =	
  2	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
session_id	
  =	
  2	
set_cookie(‘session_id’,	
  2)	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
session_id	
  =	
  2	
session_id	
  =	
  2	
cookie	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
session_id	
  =	
  2	
session_id	
  =	
  2	
cookie	
	
  
	
  
Cookie:	
  
session_id	
  =	
  2	
  
post:	
  
name=taichi	
  
	
  
	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
name=taichi	
session_id	
  =	
  2	
session_id	
  =	
  2	
cookie	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
name=taichi	
session_id	
  =	
  2	
session_id	
  =	
  2	
cookie	
Res	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
name=taichi	
session_id	
  =	
  2	
session_id	
  =	
  2	
cookie	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
name=taichi	
session_id	
  =	
  2	
session_id	
  =	
  2	
cookie	
	
  
	
  
Cookie:	
  
session_id	
  =	
  1	
  
post:	
  
name=inoue	
  
	
  
	
クライアント サーバ
hoge=fuga,	
  foo=bar,	
  
name=inoue	
session_id	
  =	
  1	
session_id	
  =	
  1	
cookie	
name=taichi	
session_id	
  =	
  2	
session_id	
  =	
  2	
cookie	
クライアント サーバ
こんな感じで保持している
【注意】
クライアントはサーバからは
⾒見見えない
クライアントを隠してみると、
session_̲idの働きがより分かる
Req	
クライアント サーバ
session_id	
  =	
  1	
クライアント サーバ
session_id	
  =	
  1	
set_cookie(‘session_id’,	
  1)	
クライアント サーバ
session_id	
  =	
  1	
クライアント サーバ
session_id	
  =	
  1	
	
  
	
  
Cookie:	
  
session_id	
  =	
  1	
  
post:	
  
hoge=fuga	
  
	
  
	
クライアント サーバ
hoge=fuga	
session_id	
  =	
  1	
クライアント サーバ
hoge=fuga	
session_id	
  =	
  1	
Res	
クライアント サーバ
hoge=fuga	
session_id	
  =	
  1	
クライアント サーバ
hoge=fuga	
session_id	
  =	
  1	
	
  
	
  
Cookie:	
  
session_id	
  =	
  1	
  
post:	
  
foo=bar	
  
	
  
	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
Res	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
Req	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  2	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  2	
set_cookie(‘session_id’,	
  2)	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  2	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
session_id	
  =	
  2	
	
  
	
  
Cookie:	
  
session_id	
  =	
  2	
  
post:	
  
name=taichi	
  
	
  
	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
name=taichi	
session_id	
  =	
  2	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
name=taichi	
session_id	
  =	
  2	
Res	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
name=taichi	
session_id	
  =	
  2	
クライアント サーバ
hoge=fuga,	
  foo=bar	
session_id	
  =	
  1	
name=taichi	
session_id	
  =	
  2	
	
  
	
  
Cookie:	
  
session_id	
  =	
  1	
  
post:	
  
name=taichi	
  
	
  
	
クライアント サーバ
hoge=fuga,	
  foo=bar,	
  
name=inoue	
session_id	
  =	
  1	
name=taichi	
session_id	
  =	
  2	
クライアント サーバ
hoge=fuga,	
  foo=bar,	
  
name=inoue	
session_id	
  =	
  1	
name=taichi	
session_id	
  =	
  2	
Res	
クライアント サーバ
hoge=fuga,	
  foo=bar,	
  
name=inoue	
session_id	
  =	
  1	
name=taichi	
session_id	
  =	
  2	
クライアント サーバ
リクエストに含まれる
session_̲idを頼りにして、
「誰がどういう状態か」
を保持している
「誰がどういう状態か」
を保持する⽅方法は、
他にもある。
情報を暗号化して、
クライアントに保持してもらう
※  Railsのcookie  storeの場合
セッション管理理⽅方法(2)
Res	
Req	
クライアント サーバ
Req	
クライアント サーバ
初めて来た人だな。	
クライアント サーバ
次来たときは、	
  
session_id=1と名乗ってもらおう。	
クライアント サーバ
セッション情報は暗号化しておこう	
クライアント サーバ
session_id	
  =	
  1	
Config/secrets.yml	
セッション情報	
🔒セッション情報	
暗号化	
クライアント サーバ
set_cookie(	
  ‘ 🔒セッション情報’)	
クライアント サーバ
🔒セッション情報	
cookie	
クライアント サーバ
🔒セッション情報	
cookie	
	
  
	
  
Cookie:	
  
🔒セッション情報	
  
post:	
  
hoge=fuga	
  
	
  
	
クライアント サーバ
🔒セッション情報	
cookie	
 🔒セッション情報	
クライアント サーバ
🔒セッション情報	
cookie	
session_id	
  =	
  1	
Config/secrets.yml	
セッション情報	
🔒セッション情報	
復号化	
クライアント サーバ
🔒セッション情報	
cookie	
session_id	
  =	
  1	
Config/secrets.yml	
セッション情報	
🔒セッション情報	
復号化	
なるほど、さっきの人ね。	
クライアント サーバ
session_id	
  =	
  1,	
  hoge=fuga	
セッション情報	
情報追記	
🔒セッション情報	
cookie	
クライアント サーバ
session_id	
  =	
  1,	
  hoge=fuga	
Config/secrets.yml	
セッション情報	
🔒セッション情報	
再び暗号化	
🔒セッション情報	
cookie	
クライアント サーバ
set_cookie(	
  ‘ 🔒セッション情報’)	
セッション情報’)	
🔒セッション情報	
cookie	
クライアント サーバ
🔒セッション情報	
セッション情報	
cookie	
セッション情報が更新される。	
クライアント サーバ
「誰がどういう状態か」は
cookieが持っている
cookieが持っている
session情報を復復号化して、
「誰がどういう状態か」
を把握している
まとめ
誰がどのような状態か、
保持しておきたい時がある
↓
ステートフル
ステートレスをステートフルに
する⽅方法
↓
Session管理理
Session管理理する⽅方法
↓
sessionやcookie
終わり!

Weitere ähnliche Inhalte

Was ist angesagt?

新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?naoki koyama
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)Masaya Tahara
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Hiroyuki Wada
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話ichirin2501
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified IDNaohiro Fujie
 
DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所Ryo Sasaki
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 

Was ist angesagt? (20)

新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
 
DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 

Mehr von Kamimura Taichi

ruby 関数化のメリット
ruby 関数化のメリットruby 関数化のメリット
ruby 関数化のメリットKamimura Taichi
 
わからないことがわからないときにどうしたらよいのか。
わからないことがわからないときにどうしたらよいのか。わからないことがわからないときにどうしたらよいのか。
わからないことがわからないときにどうしたらよいのか。Kamimura Taichi
 
Ruby - オブジェクト指向入門
Ruby - オブジェクト指向入門Ruby - オブジェクト指向入門
Ruby - オブジェクト指向入門Kamimura Taichi
 
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Kamimura Taichi
 
What is git commit? - git commitって何なの?
What is git commit? - git commitって何なの?What is git commit? - git commitって何なの?
What is git commit? - git commitって何なの?Kamimura Taichi
 

Mehr von Kamimura Taichi (11)

Vuejs meetup
Vuejs meetupVuejs meetup
Vuejs meetup
 
ruby 関数化のメリット
ruby 関数化のメリットruby 関数化のメリット
ruby 関数化のメリット
 
ajaxってなんなの
ajaxってなんなのajaxってなんなの
ajaxってなんなの
 
わからないことがわからないときにどうしたらよいのか。
わからないことがわからないときにどうしたらよいのか。わからないことがわからないときにどうしたらよいのか。
わからないことがわからないときにどうしたらよいのか。
 
git addの解説
git addの解説git addの解説
git addの解説
 
Ruby - オブジェクト指向入門
Ruby - オブジェクト指向入門Ruby - オブジェクト指向入門
Ruby - オブジェクト指向入門
 
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方
 
vim入門
vim入門vim入門
vim入門
 
Ansible超入門
Ansible超入門Ansible超入門
Ansible超入門
 
What is git commit? - git commitって何なの?
What is git commit? - git commitって何なの?What is git commit? - git commitって何なの?
What is git commit? - git commitって何なの?
 
angularJS vs angular2
angularJS vs angular2angularJS vs angular2
angularJS vs angular2
 

Session管理とRailsのcookie store