@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
終わり!

Session管理とRailsのcookie store