Edited at

4歳娘「パパ、セッションとCookieってなあに?」


ある日の我が家

(4歳)「パパ、セッションとかCookieってなあに?」

娘「サーバサイドの勉強してると出てくるやつ」

ワイ「おお、今日はその質問か」

ワイ「ええでええで〜、パパが教えたるで〜」

娘「わ〜い!」

ワイ「ワ〜イ!」


例えば月曜日

ワイ「例えば、月曜日の朝は仕事する気にならへんからTwitterを見るやろ?」

娘「うん!」

ワイ「せやからTwitterのホーム画面を見るために」

ワイ「ブラウザのアドレスバーにhttps://twitter.com/homeって打ち込むんや」

ワイ「まぁ実際にはブックマークから行くんやけど、まぁ同じことや」

ワイ「つまりブラウザ君を通して、サーバ君に」


「ワイのTwitterのホーム画面のHTMLをくれや〜」


ワイ「ってことを伝える訳や」

娘「うんうん」

ワイ「でもな?」

ワイ「それもCookieを使ってセッション管理をせんと実現できひんことやねん」

娘「何で?」

ワイ「世界中のPCやスマホからTwitterのサーバにアクセスが来るわけやから」

ワイ「サーバ君からして見たら」


ワイのアクセス「ワイのホーム画面をくれや〜!」

山田くんのアクセス「ワイのホーム画面をくれや〜!」

佐藤くんのアクセス「ワイのホーム画面をくれや〜!」

〇〇くんのアクセス「ワイのホーム画面をくれや〜!」

・・・

・・・


ワイ「ってな感じや」

ワイ「何万人ものユーザが」


「ワイのホーム画面をくれや〜!」


ワイ「ってアクセスしに来るねん」

ワイ「でも、HTTP通信っていうのはステートレスな通信やからアカンねん」

娘「ステートレス・・・状態がないってこと?」

ワイ「せや」

ワイ「例えば・・・」


ワイのアクセス「ただいまYametaro1983のアカウントでログイン中や!」

ワイのアクセス「せやからワイのホーム画面をくれや〜!」


ワイ「↑こんな感じで、現在の状態を添えてサーバ君にリクエストしてあげたら」

ワイ「サーバ君も」


サーバ君「よっしゃ、貴様のホーム画面の情報を返したるわ!!!」


ワイ「・・・って返してくれると思うんやけど」

ワイ「HTTPリクエストは状態を持たれへんから」

ワイ「毎回はじめましてな感じやねん」


サーバ君「貴様ら、ワイのホーム画面くれとか、ワイの通知一覧くれとか言うてるけど」

サーバ君「ワイって誰やねん!!!

サーバ君「どのアカウントでログイン中の奴やねん!!!」


ワイ「って感じやねん」

ワイ「せやからCookieを使ったセッション管理が必要なんや」

娘「まだよく分かんないけど、Cookieを使ってセッション管理ってのをすると」

娘「どのアカウントでログイン中なのか、っていう」

娘「そういう状態をサーバ君に伝えられるってこと?」

ワイ「せや」

ワイ「擬似的にやけどな」


そもそもセッションとは

ワイ「セッションって言葉には一定期間の活動っていう意味があるんや」

ワイ「つまり、1回こっきりのアクセスやなくて」

ワイ「ログインした状態で色んなページを見て回ったり、っていう」

ワイ「そういう一連の流れセッションやな」

娘「うんうん」

娘「で、どうやってその流れを表現するの?」

娘「HTTP通信は毎回はじめましてになっちゃうんでしょ?」

ワイ「ほな説明していくで」

ワイ「まず、自分のホーム画面を見るためには」

ワイ「ログイン画面でアカウントとパスワードを入力してログインをするやろ?」

娘「うん」

ワイ「そうするとサーバ君が」


サーバ君「ログインできたで〜!」


ワイ「って言う情報と共に」


サーバ君「貴様の個人識別番号gh3049ghjb39003nやから、覚えときや〜!」


ワイ「っていう指示をブラウザ君に対してくれるねん」

ワイ「そうすると、ブラウザ君はその個人識別番号を保存しといてくれんねん」

ワイ「その、ブラウザに保存される情報がCookieや」

娘「へえぇ〜」

ワイ「個人識別番号だけやなくて、ほかにもいくつも記憶させたり出来るで」

娘「そうなんだね」

娘「パパより賢いね」

ワイ「せや」


Cookieって何かに似てる

娘「Cookieってなんか」

娘「JavaScriptのsessionStorageとかlocalStorageみたいだね」

ワイ「せやな」

ワイ「でもそれらと違うのは、Cookieは毎回サーバに自動送信されるってとこやな」

娘「そうなんだ〜」

ワイ「ほんで、ブラウザ君だけがその個人識別番号を覚えててもしゃあないから」

ワイ「当然サーバ君も記憶しておいてくれんねん」

ワイ「サーバ側が記憶してくれる情報がセッション情報や」

娘「なるほど〜」

娘「だから・・・」


ワイのアクセス「今度は通知一覧ページをくれや〜」

ワイのアクセス「ワイの個人識別番号はgh3049ghjb39003nやで〜(自動送信)」

サーバ君「また貴様か!」

サーバ君「ずっとTwitter見てるな!」

サーバ君「仕方ない、ほらよ!」


娘「みたいに、サーバ君とのやり取りができるんだね」

ワイ「せや」

ワイ「ドチャクソざっくりやけど、イメージは分かったやろ?」

娘「うん!」

娘「HTTP通信はステートレス、つまり状態を持たないけど」

娘「Cookieをつかってセッション管理をすると」

娘「ちゃんとユーザを識別したりして」

娘「擬似的に状態を維持できる!

娘「ってことだね!」

ワイ「そんな感じや!!!」

ワイ「アクセスする度に毎回はじめまして、やなくて」

ワイ「一つの流れ、つまりセッションとして扱える感じやな!」


娘ちゃんが寝たあと

よめ太郎「あんた、セッションとかCookieとか知ってたんやな」

よめ太郎「jQueryしか知らんのかと思ってたわ」

ワイ「いや、実は昨日ハスケル子ちゃんがな」


ハスケル子「そろそろ娘ちゃんからこんな質問が来るころだと思うので」

ハスケル子「セッションとCookieのことをお伝えしておきますね・・・」


ワイ「って言うて、あらかじめ教えてくれたんや・・・」

よめ太郎「Oh...」

よめ太郎「ハスケル子ちゃん、預言者かい・・・」


そのとき会社では

ハスケル子「ハ、ハッ・・・」

ハスケル子「ハッスケル!!!!!

ハスケル子「誰か私のウワサしてるな・・・」

〜おしまい〜