居酒屋の靴箱で覚えるSessionとCookie
「ひまじんプログラマーの週末エンジニアリングレッスンです始まりましたというわけでこのラジオはひまじんの中級エンジニアが送る駆け出しエンジニアをキャリアアップさせるラジオということでやっておりますよし今日も何かをアップさせるぞ考えていきましょうアップアップです自己紹介ですカイチです中級エンジニアですノリです初級エンジニアのじゅんぺいですというわけで今日は何ですか今日はですね駆け出しエンジニアに知ってほしい」
「セッションとクッキーのお話でございますめちゃくちゃ聞きたいです用語?用語ですね用語え、じゅんぺいくんちなみにセッションとクッキー聞いたことは絶対ありますよねはいはい」
「どんなものかっていうのをちょっと説明してみてもらっていいですか?セッションの話をしまして僕がJavaでSpringをフレームワークを使って書いているのでイメージとしてはセッションにデータを置いておいてそれを取ってきたり保存したりする場所そういう場所っていうイメージでクッキーは」
「なんか、分かんなくてフロント側の人たちが使うような要はセッションみたいなイメージで勝手に思ってるんですけどおぉ、何点?そんな感じです、僕のイメージ40…45ぐらいかなぁそれは、セッションとクッキーどっちもクッキーに関しては45点セッションに関しては全体ふわっとしてるんであれ?あれ?OKです、ぜひ聞かせてください分かりました、じゃあまず」
「セッションからいきましょうかセッションとクッキーってどっちも値を保存するための仕組みなんですよはいはい仕組みはいはいでセッションはサーバー側に値を保存しますよと」
「クッキーはブラウザーに値を保存しますよっていうそういう感じですとなんでこれ必要なのっていう話なんですけどまずですねこれhttpの話からしないとちょっといけないんですよhttpって実はステートレスって言われててステートレスとは」
「状態がレスですそういうこと見えづらい見えない見えないというか例えばウェブサイトまずトップページに訪れるじゃないですかその後コンタクトページとか仮想ページに移動するじゃないですかその時って最初にトップページへのリクエストを飛ばしてトップページのレスポンスが返ってきて表示してます次にその仮想ページのリクエストを飛ばしてその仮想ページを表示してますみたいな感じで一個一個って実は」
「全く関係ないんですよ連続してないというかユーザーからしたら確かに最初のページ行って次のページ行ったという気持ちになるんですけど普通にコンピューターの通信の仕組みで言えば別にそこは関係ないですねそういう状態っていうのを持ってないよっていうのがステートレスというものです状態関連性がない前何したか覚えてないって感じ」

「関係ないのが近いかもしれないわかりましたそれだとちょっと問題がありまして例えばログイン必要なウェブサイトを考えてみてくださいログイン必要なサイトってまずパスワードとIDとか入れてログインと押しますよねログイン完了しましたとでもステートレスってログインしたことすら忘れてしまうんで要は次のページ行ったらまたログイン求められるみたいな」
「ことが起きるんですよそれだとめんどくさいし毎ページごとに毎回毎回ページ開くたびにログインなんてやってらんないじゃないですかっていうのを状態を保存するために使ってるのがセッションクッキーそのあたりっていう感じですねなるほどなるほどログインでちょっと説明していこうかなこれは関係があるってなるとステートとは言うんですかこれ」
「逆にステートレスは言うのかもしれないですけどステートフル?ステートフルステートフルっていうことはあるの?ステートフルな作りをしてるみたいな言い方があるあるあるあるあるそういう言い方がありますねなるほどHTTPがステートレスだからそこをちょっとステート持たせるために使ってるのがセッションクッキーみたいな感じよねはいセッションがサーバーに保存してるうん」
「サーバーも2種類あるじゃないですか物理的なサーバーとそうじゃないサーバークラウドかオンプレかってこと?どっちも結局は物理的なサーバーだよどっちも結局は物理的なサーバーAWSとかのクラウドも突き詰めるとデータセンターにある箱世の中のサーバー全部物理的なサーバーですなるほどクッキーがブラウザクッキーはブラウザに値を持たせてますはい」
「ログインの時の仕組みをちょっとお話しするとですねまずIDとパスワードを入れますと送信しますよねその時にまずサーバーにリクエスト飛びますサーバー上でIDとパスワードが合っているかどうかを称号しますと」
「であってたらセッションのところにユーザー順平がログインしましたみたいな情報を保存するんですよそうしておけば次もう一回リクエスト飛ばした時もこいつはログインしてるなっていうのが分かるので毎回毎回求められなくて済むとなるほどでセッションってちょっと靴箱みたいな感じなんですよ」
「居酒屋の靴箱ってさ仕切りがあるってことですかブロックごとに誰のセッションなのか分かれてるというか例えば居酒屋ってあの一番に入れましたねそしたらそのあの一番に入れたっていう情報だけは持ってないといけないんですよじゅんぺいがでそのあの一番を保存してるのがクッキースが」
「要はブラウザが誰なのか分かんないといけないんでそのブラウザの中にアの1みたいなのが入ってるんですねで次リクエスト送るときに僕のセッションのIDアの1ですって一緒にリクエスト送るんですよそしたらサーバーそれ受け取りますこいつアの1ねみたいなでアの1開いたらログインしてるって証拠あるわって言ってお前はログインしているって判断されるっていうセッションとクッキーはそしたら常にセットなんです」

「常にセットとは限らんとは限らないセッションはセットかもクッキー単体では使える気がするセッションクッキーかクッキークッキーだけクッキーは単体で使うと思う結構セッションID以外のクッキー見てみたらいっぱい残ってるしセッションはどうだろうなセッションはクッキーとセットじゃないとどのセッションか分かんなくなる気がするそうですねなるほど」
「クリアになりました。なるほど。本当か?なるほど。いやーこれなんかわかりやすい説明でありがとうございます本当に。本当ですか?すごい。マジ?なんとなく使ってたんですけど、ノートを保存しててIDみたいな、セッション.なんとかってそのIDみたいな感じで引っ張ってくる。そういうブロック分けされてるから」
「っていうイメージがつきましたどんな時に使うのっていう話なんですけどページまたいで情報を保存したい時ですねログインとかもずっとログインした状態になっててほしいからページまたぎ発生してるじゃないですかあとはECサイトのカートとかね」
「カートもさカートに入れたのにさ次のページ行くたびにスルンって抜けてったらさバチギレじゃんバチギレですでもなんか実装するってなったら結構難しかったですね僕そこらへん何ですかログインしてない状態でカートに入れてでログインしたらログインしたカートにも入ってるよとかそこがうまくリンクしなかったりするの難しかったりしましたけどまあそういうとこに保存してうん」
「持ってくれるようにする作用でございますちょっと脱線しましたがこれはよくコンビニの店員とのやり取りみたいな事例出されることが多いよねそうなんですか知らない例えばコンビニより違う」
「某ハンバーガーチェーン店でいいですかはいじゃあハンバーガー一つお願いしますとまず言いますと店員さんに店員さんがハンバーガー一つですねとでその時にステートレスだった場合って次それに追加する時にあ、あとハンバーガーとジュースお願いしますみたいなコーラセットでお願いしますみたいなハンバーガーとコーラセットですねみたいな」
「お支払いはどうしますかみたいな時にハンバーガーとコーラ支払い現金でお願いしますっていうのを毎回毎回どんどん付け足さないといけないんですよこれがステートレスって呼ばれてる状態ですねめんどくさいですねステートフルな状態でやってればまず最初ハンバーガーお願いしますあとコーラもお願いします普通の店員さんとのやり取りみたいになるって」
「事例がよく取り沙汰になってますねワードチョイス取り沙汰されているニュースみたいになっちゃいましたねわかりやすいです一段落しましたねという話でございましたありがとうございますクッキーとかは今わかっていただいた通り認証情報とかを持っているので何か間違えて取られちゃったりすると非常にセキュリティ的に危なかったりとか」

「割といろんな使い方ができるので例えば裏でなんだろうなアフィリエイトとかってクッキー使ってるのかなあんまよくわかんないけどあれはURLパラメーターな気がするなそれだけですかねでもクッキーもなんか渡してる気がするそのユーザーがそのパラメーター踏んだかどうかみたいなそうそうそうそう裏側でいろいろこそこそやってるようなやつなのでブラウザが予期せぬ動きとかするときはクッキー消してさらにして」
「やったりとかするとまあ治ったりする確かにクッキーなんかクッキークッキークッキークッキーとかだと最近なんかエンジニアにかからずよく見ますよね結構ウェブサイト飛んだ時クッキー保存しますからああそうだねそうだねあれなんかどっかで法律なんか改正されてそれ以降な気がするそういうのを相手に許可取らないといけないみたいな感じEUなんちゃら規則みたいなうん」
「影響な気がするあれを保存しないみたいな同意しないみたいな感じしちゃうと一時ステートレスになっちゃって一時毎回入力し直すとかそういうのが発生するかもかもだけどだいたいなんか不都合な使われ方されることが多いから僕はデフォで許可してないわそうなんですか僕は勝手にそう思ってますあれってEAをして使えるの?」
「サイトによっては全然使えますよあそうなんだ基本なんかはいを押してましたここクッキーじゃないとダメそうだなクッキーないとダメそうだなって思ったら許可してるんでそこはまあなんとなくクッキー読めるようになってたらいいと思う難しそうだね全許可してるわ全許可してます難しそうだねそれはなるほどわかりました使えるのもありますじゃあセッションクッキーこれでマスターできましたかねできました実装できますか実装できますクッキーはちょっとあかんねくぐり方わかればねうん」
「大丈夫ですよ今時のサービス必須なのかなクッキーなくなっていくのかななくなりそうな感じがするよねブラウザが頑張ってるもんねそうなんですね広告期待ですね今日はセプションとクッキーの話でしたこれで皆さんもステートフルなアプリケーション作れますねいいですねレベルアップしましたありがとうございますではまた次回バイバイ」
「イマジンプラグラマーではメールを募集していますトークテーマ悩み要望などなど何でも募集中です宛先はhimapro11atmarkgmail.comhimapro11atmarkgmail.comになりますそれではまた次回」