Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
sessionとcookieが多分わかる資料
Search
Yoshiki Kobayashi
May 29, 2020
Programming
14k
11
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
sessionとcookieが多分わかる資料
Yoshiki Kobayashi
May 29, 2020
More Decks by Yoshiki Kobayashi
See All by Yoshiki Kobayashi
エンジニアとして生きていくために在学中に多分やっておいた方が良いこと
yoshi0202
1
510
ターミナル操作が多分早くなるtmuxのすゝめ
yoshi0202
0
1k
サーバレスアーキテクチャでLINE BOTが多分作れるようになるハンズオン
yoshi0202
0
1k
サーバ構築の勘所が多分わかるハンズオン
yoshi0202
0
420
Dockerのことが多分わかるハンズオン
yoshi0202
48
21k
Other Decks in Programming
See All in Programming
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
5.8k
Agents on Rails - Rails at Scale 2026
irinanazarova
0
520
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.9k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
190
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
34
16k
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
390
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
260
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
890
パーソナライズPodcastを作った話
repunit11
0
130
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
340
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
940
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
400
What's in a price? How to price your products and services
michaelherold
247
13k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
680
Fireside Chat
paigeccino
43
4.1k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
580
Transcript
sessionとcookieが 多分わかる資料 Yoshiki Kobayashi 2020/05/29 1
この資料に書いてあること • sessionのきほん • cookieのきほん • それぞれの利用用途 • 基本的な使い方 2
この資料に書いてないこと • secureとか • CSRFとか • 細かいセキュリティとか • 上手な日本語 3
sessionのきほん の前に… 4
httpの ステートレス通信 について 5
ステートレス通信 って何 6
通信元の情報が わからない そもそもhttpの通信は 7
例 僕の情報ください 私の情報! 僕の情報も! Aさん Bさん Cさん 誰が誰か わかんないんだよ なぁ…
サーバ君 8
sessionを 利用することで… 9
ステートフルに 通信することができる 10
例 僕の情報ください 私の情報! 僕の情報も! Aさん Bさん Cさん 識別子があるから どこからの通信か わかる〜
サーバ君 各自の識別子 Aさん:a Bさん:b Cさん:c +Aさんの識別子 [a] +Bさんの識別子 [b] +Cさんの識別子 [c] 11
これが sessionの基本 12
sessionは基本的に サーバ側で管理される 13
でも、、、 14
ユーザを判別する 識別子は どこに保存するの DB?メモリ? それともファイル? 15
再掲 →これ 僕の情報ください 私の情報! 僕の情報も! Aさん Bさん Cさん 識別子があるから どこからの通信か
わかる〜 サーバ君 各自の識別子 Aさん:a Bさん:b Cさん:c +Aさんの識別子 [a] +Bさんの識別子 [b] +Cさんの識別子 [c] 16
ここからCookieの話 の前に、、、 17
ぶっちゃけ Cookieて何 18
Cookieとは マジッククッキーの一種であり、RFC 6265な どで定義されたHTTPにおけるウェブサーバ とウェブブラウザ間で状態を管理する通信プ ロトコル、またそこで用いられるウェブブラウ ザに保存された情報のことを指す。 by wikipedia 19
は? 20
ブラウザに 好きなデータが 保存して使えるよ! ってこと つまり簡単に言うと 21
制限は色々あるけどね 22
Cookieを踏まえて sessionを考えてみると 23
サーバで識別子を払い 出して、ブラウザの Cookieに保存しちゃえ ばいいんじゃね? 24
具体例 ログイン画面で ログインしてくれ 自分のログイン情報と一緒 にログインするよ ID/PASSWORD Aさん ログイン成功や! Aさんの識別子発行するやで! token/abcdefg
Aさんはログイン中 というステータスを サーバで管理 返却されたtokenを Aさんのブラウザ Cookieにセット 25
具体例 Aさん 僕の情報ちょうだい! リクエスト+token/abcdefg Cookieにセットさ れたtokenをリクエ ストに付与 Aさんからの通信やな! Aさんの情報だけ返却するで! Aさんの情報を返却
token情報からAさ んのログイン状態 を照合 26
具体例(ログインしていない場合) Aさん 僕の情報ちょうだい! リクエストのみ だれからの通信かわからんな … ログインしてないようだ (例えば)ログイン画面を返却するなど token情報がなく誰 からの通信か
わからない 27
ステートフル通信 28
まとめると • Cookieとは、ブラウザが持っている好きなデータを貯められるストア • JavaScriptで設定することができる • サーバからのレスポンスで自動で設定することもできる • Sessionとは、サーバ側で保持しているデータ •
ステートレスであるhttp通信をステートレスにするために用いられる (ことが多い) • SessionにはID(前述したToken)があり、ユーザのCookieで管理する方法、 DBで管理する方法など様々ある 29
実際に どんな感じで設定されるか 見てみよう 30
我らのRoomingログイン画面 31
ログインすると・・・ 32
Cookieが設定される ここの[_app_session]っていうのが、Rails側で払い出されたsession_id ※クッキー名[Rooming]はsession用のCookieでは無い 33
コードで言うとこの部分 sessionの中に[userId]っていうキーを持ち、 user.idを代入してる 34
Railsからのレスポンスを見てみよう これがsession_id HttpOnlyをつけて JSから抜き出せないよ うにしてる Set-Cookieっていうヘッ ダーがついたレスポン スが返却されると、自動 でCookieが設定される 35
JSでCookieを取得してみよう HttpOnlyが付いていないCookieに関しては 取得することができている 36
ん? 37
結局JSから 操作できないんか? 38
JSで取得できないなら axiosでどうやって 送ったらええの? 39
再掲 Aさん 僕の情報ちょうだい! リクエスト+token/abcdefg Cookieにセットさ れたtokenをリクエ ストに付与 Aさんからの通信やな! Aさんの情報だけ返却するで! Aさんの情報を返却
token情報からAさ んのログイン状態 を照合 40
これできなくね? 41
一部の条件下であれば できました 42
コードで言うとこの部分 オプションに[withCredentials]を付与。ヘッダーにAllow-Originを追加 すると、自動でCookie内のsession_idが付与されてリクエストが送信される 43
リクエストするときにCookieが設定される ヘッダーからマイページアイコンを押したときの処理(ユーザID取得関数) 自動的にCookieがリクエストに付与されて、Rails側で処理されてる 44
コードで言うとこの部分 送られてきたCookieの中からsession_idをパースして、 userIdの値からfind_by_idを実行している図 45
以上が、 サーバで発行したセッションIDがCookieに 保存されて、 クライアントからのリクエストにセッションID が付与されるまでの仕組み 46
注意 Allow-Origin正しく設定 しないとリクエストもレス ポンスもCookieつかな いよ!!! 47
今日おぼえたこと! • Cookieとはなんぞや • Sessionとはなんぞや • ステートレス、ステートフルとはなんぞや • 結論どうやって使うんや 48
終わり!!!!!! 最後に好きな絵文字で終わります To Be Continued … ? 49