クッキーはブラウザで管理するけれど、セッションはサーバで
前回の以下の記事で、Cookie(クッキー)について解説しました。
あれは「ユーザーの背中に張り紙をする」技術でした。
しかし、ここには致命的な弱点があります。張り紙は誰でも読めるし、その気になれば書き換えられるということです。
もしあなたが、銀行の残高やパスワードをCookieに保存したらどうなるか。
背中に「暗証番号は1234」と書いて渋谷のスクランブル交差点を歩くようなものです。自殺行為です。
そこで登場するのが「セッション(Session)」です。
これは、大事な荷物をユーザーに持たせず、サーバー側の「コインロッカー」に預ける仕組みです。
仕組み:あなたは「鍵」を持つだけ
セッションの仕組みは、駅のコインロッカーや、荷物預かり所と全く同じです。
- 預ける
あなたがサーバーに重要なデータ(ログイン情報など)を渡す。 - 保管
サーバーはそれを自分の倉庫(メモリやファイル)に厳重に保管する。 - 鍵を渡す
サーバーはあなたに「引換券(セッションID)」だけを渡す。
ここが重要です。あなた(ブラウザ)が受け取るのは、意味のない乱数の文字列だけです。
「a7f3…」のような、ただの記号です。これ自体には何の意味もありません。
次にアクセスする時、あなたは「引換券」だけを見せる。
するとサーバーは引換券の番号を見て、倉庫からあなたのデータを取り出します。
これならひとまず安心です。
もし誰かに引換券を見られても、ただちにあなたの個人情報は漏れません。データ本体はサーバーという要塞の中にあるからです。
もし誰かに引換券(セッションID)が知られてしまった、またその可能性があると思ったら、一刻も早く「ログアウト」ボタンを押しましょう。
これで、漏れてしまった自分の引換券(セッションID)は何の役割も持たなくなります。
あなたの借りているコインロッカーのカギ穴が、新しいものに交換されるようなものです。
セッションID:世界に一つの引換券
この「引換券」のことを、専門用語で「セッションID」と呼びます。
実はこのセッションIDの受け渡しに、前回解説したCookieが使われています。
Cookieという封筒の中に、データそのものではなく「ロッカーの鍵」だけを入れてやり取りしているのです。
- Cookie単体
封筒の中に「現金」が入っている(これだと危険) - CookieとSession
封筒の中に「ロッカーの鍵」が入っている。現金はロッカーの中に入っている(これなら安全さが上)
この違いをイメージとして持つのがオススメです。
PHPでの使い方:session_startの儀式
PHPでセッションを使うには、必ず最初にやらなければならない儀式があります。
session_start() です。
session_start(); // ロッカーの使用開始を宣言
// データを預ける
$_SESSION["login_user"] = "田中";Code language: PHP (php)
session_start() を書いた瞬間、PHPは自動的に以下の仕事をします。
- ユーザーが「鍵(セッションID)」を持っているか確認する。
- 持っていなければ、新品の鍵を発行してCookieに保存させる。
- 持っていれば、サーバー上のロッカーを開けて中身を取り出す。
これらを全部自動でやってくれます。
開発者は、$_SESSION という箱にデータを入れるだけ。あとはPHPが勝手にサーバー側に保存してくれます。
取り出す時も簡単です。以下のソースコードは、別ページのPHPとお考え下さい。
session_start(); // 各PHPファイルごとに書くようにする
echo $_SESSION["login_user"]; // 結果:田中Code language: PHP (php)
ページを移動してもデータは消えません。サーバー側のロッカーに入っているからです。
session_start()の注意点
session_start関数を呼ぶときには、HTMLタグや空白、改行などを出力する前(ファイルの本当に一番最初) に書かないとエラーになる、という点に注意です。
そのため、慣れないうちはPHPファイルの最初の行に書いてしまうのが無難でしょう。
Cookieとの使い分け:貴重品はロッカーへ
「全部セッションにすればいいじゃないか」
そう思うかもしれません。
しかしセッションはサーバーのメモリやディスクを消費します。何万人もの客が全員ロッカーを使ったら、サーバーがパンクします。
使い分けの基準は基本的に「重要度」です。
- Cookie(手荷物)
「メニューの開閉状態」や「既読フラグ」など、わりとどうでもいい情報。消えても困らないもの。盗まれても被害が少ないもの。 - Session(ロッカー)
「ログイン中のユーザーID」「カートの中身」「決済情報」。絶対に漏洩してはいけないもの。データ量が多いもの。
リスク:鍵を盗まれたら終わり
セッションは比較的安全ですが、無敵ではありません。「セッションハイジャック」という攻撃手法があります。
これはロッカーを壊すのではなく、あなたの手から「鍵(セッションID)」を盗み取る手口です。
カフェのフリーWi-Fiなどで通信を盗聴され、セッションIDをコピーされたらやばいです。
攻撃者は手に入れたあなたの鍵を使って堂々とロッカーを開け、あなたになりすましてログインします。
これを防ぐには、通信を必ず暗号化(HTTPS化)するのが大事です。鍵の受け渡しを、透明なパイプではなく黒塗りの土管の中で行うイメージです。

まとめ:サーバーを信じろ、自分を信じるな
- Cookie
ユーザーに持たせるメモ。改ざんされるし盗み見られる。 - Session
サーバーに預けるロッカー。ユーザーは鍵を持つだけ。
Webアプリケーションを作る際、ユーザー(ブラウザ)側にあるデータは一切信用してはいけません。
重要なデータはすべてサーバー側のセッションに隠す。これが鉄則です。
あなたのサイトのユーザーを、丸裸で歩かせることのないようにしましょう。
ちゃんとロッカーを用意してあげるのが、管理人の務めです。



コメント