はじめに
Webサイトを使っているとき、こんな経験はありませんか?
- ログインしたら、他のページに移動してもログイン状態が続いている
- ショッピングサイトで商品をカートに入れて、別のページを見てもカートの中身が残っている
- 一度ログインしたら、しばらく再ログインを求められない
これらは全て「セッション」という仕組みのおかげです。この記事では、Webサイトがあなたを覚えている仕組みを、図解を使って分かりやすく説明します。
そもそも「セッション」って何?
現実世界で例えてみよう
セッションを理解するために、まず現実世界で例えてみましょう。
図書館での本の貸し出しを想像してください
あなた:「この本を借りたいです」
司書さん:「図書カードを見せてください」
あなた:図書カードを提示
司書さん:「田中さんですね。この本をお貸しします」
(数日後、別の本を借りに来た時)
あなた:「この本も借りたいです」
司書さん:「図書カードを見せてください」
あなた:図書カードを提示
司書さん:「田中さんですね。前回借りた本の返却期限は○○日です。こちらの本もお貸しします」
ここで重要なのは:
- 図書カード = あなたを識別するもの
- 司書さんの記録 = あなたの借用履歴を保存する場所
Webサイトでも同じことが起きている
Webサイトでも、図書館と同じようなことが起きています。
あなた(ブラウザ):「商品Aをカートに入れたい」
Webサイト:「分かりました。あなた専用の番号をお渡しします」→「ID-12345」
(別のページを見た後)
あなた(ブラウザ):「カートの中身を見たい」(ID-12345も一緒に送信)
Webサイト:「ID-12345の方ですね。商品Aが入っています」
この「ID-12345」のような番号が セッションID です!
HTTPの「物忘れ」問題
なぜセッションが必要なの?
Webサイトが使っている HTTP という通信方法には、大きな特徴があります。それは「物忘れがひどい」ことです。
HTTPの特徴:ステートレス(状態を覚えない)
リクエスト1:「商品Aをカートに入れて」
Webサーバー:「はい、入れました」(すぐに忘れる)
リクエスト2:「カートの中身を見せて」
Webサーバー:「え?誰のカート?何のこと?」(覚えていない)
これでは困りますよね。そこで セッション の出番です!
セッションの仕組みを図解で理解しよう
1. 初回アクセス時:「初対面」の状態
あなたが初めてWebサイトにアクセスした時
- あなたがWebサイトにアクセス
- Webサイトが「初めての人だな」と認識
- あなた専用の番号(セッションID)を発行:「ABC123」
- この番号をあなたのブラウザに保存(Cookieという小さなメモ)
- サーバーも「ABC123の人は新規ユーザー」と記録
2. 商品をカートに追加:「覚えてもらう」
商品をカートに入れる時
- あなたが商品をカートに追加要求
- ブラウザが自動的に番号「ABC123」も一緒に送信
- Webサイトが「ABC123の人のカートに商品Aを追加」と記録
- 「追加完了」の返事
3. 別のページへ移動:「覚えている」
違うページを見た後、カートを確認
- カート確認のページにアクセス
- ブラウザが自動的に「ABC123」を送信
- Webサイトが記録を確認:「ABC123の人のカートには商品Aがある」
- カートの中身を表示
身近な例で理解するセッション
例1:ログイン状態の維持
SNSサイトでの例
ログイン前:番号なし
├─ ログインページ → ユーザー名・パスワード入力
ログイン成功:番号「XYZ789」取得
├─ この番号が「ログイン済み」の証明書
├─ プロフィールページ → 「XYZ789さん、こんにちは田中さん」
├─ 友達リストページ → 「XYZ789さんの友達一覧」
└─ 設定ページ → 「XYZ789さんの設定」
例2:ショッピングカート
ECサイトでの例
セッション開始:番号「DEF456」取得
商品ページ:「商品Aをカート追加」
├─ サーバー記録「DEF456 → カート:商品A」
商品検索:別の商品を探す
├─ 番号「DEF456」は保持されている
商品ページ:「商品Bもカート追加」
├─ サーバー記録「DEF456 → カート:商品A、商品B」
カート確認:
└─ 「DEF456さんのカート:商品A、商品B」
セッションIDはどこに保存される?
Cookie:ブラウザの「小さなメモ帳」
セッションIDは Cookie という仕組みでブラウザに保存されます。
Cookieって何?
- ブラウザが保存する小さなテキストファイル
- Webサイトごとに管理される
- 自動的に送受信される
【あなたのブラウザのCookie】
amazon.com → SESSIONID=ABC123, 有効期限=2時間後
google.com → SESSIONID=XYZ789, 有効期限=1日後
facebook.com → SESSIONID=DEF456, 有効期限=30日後
ブラウザの開発者ツールで確認してみよう
Chrome/Firefox/Safari共通
- F12キーで開発者ツールを開く
- 「Application」(Chrome) または「Storage」(Firefox) タブ
- 「Cookies」を展開
- サイトのドメインを選択
- セッション関連のCookieを確認
実際に見えるもの
名前: SESSIONID (または PHPSESSID, connect.sid等)
値: abc123def456ghi789 (ランダムな文字列)
ドメイン: example.com
有効期限: Session (ブラウザを閉じるまで)
サーバーはセッションデータをどこに保存している?
Webサイト(サーバー)側では、セッションIDと紐づく情報を保存する必要があります。
保存場所の種類
保存されるデータの例
セッションID:ABC123
├─ ユーザーID:12345
├─ ユーザー名:田中太郎
├─ ログイン時刻:2024-01-15 10:30:00
├─ カート内容:[商品A, 商品B]
├─ 最終アクセス:2024-01-15 11:15:00
└─ 権限:一般ユーザー
セッションのライフサイクル
セッションの「一生」
セッションが終わるタイミング
1. ブラウザを閉じた時
ユーザー:ブラウザを閉じる
ブラウザ:Cookieを削除(一時的なもの)
サーバー:しばらく後にデータを削除
2. 時間切れ(タイムアウト)
設定例:30分間操作がないと自動ログアウト
├─ 10:00 ログイン → セッション開始
├─ 10:15 ページ閲覧 → セッション延長
├─ 10:45 何も操作なし → セッション継続中
└─ 10:46 ページアクセス → ログアウト(30分経過)
3. 明示的なログアウト
ユーザー:「ログアウト」ボタンをクリック
サーバー:セッションデータを削除
ブラウザ:Cookie削除
複数のタブやウィンドウはどうなる?
同じブラウザ内では共有される
重要なポイント:セッションはブラウザ単位
Chrome ブラウザ
├─ タブ1:Amazon(ログイン済み)
├─ タブ2:Amazon 商品ページ(同じログイン状態)
└─ タブ3:Amazon カートページ(同じカート内容)
→ すべて同じセッションID「ABC123」を使用
実験してみよう
- Amazonなどのサイトにログイン
- 新しいタブでそのサイトを開く
- 既にログイン状態になっている!
異なるブラウザは別セッション
Chrome:Amazon ログイン状態(セッションID:ABC123)
Firefox:Amazon 未ログイン状態(セッションID:なし)
→ ブラウザが違うと別のセッション
セキュリティ:セッションの安全性
よくある危険とその対策
1. セッションハイジャック(乗っ取り)
危険な例
カフェの無料Wi-Fi使用中
悪い人:通信を盗聴してセッションIDを取得「ABC123」
悪い人:取得したIDを使ってあなたになりすまし
対策:HTTPS通信
HTTP:通信が丸見え(危険)
HTTPS:通信が暗号化(安全)
安全なサイトの確認方法:
URL が https:// で始まっている
ブラウザのアドレスバーに鍵マークが表示
2. セッション固定攻撃
危険な例
悪い人:「このリンクをクリックして」→ site.com?sessionid=EVIL123
あなた:クリックしてログイン
悪い人:EVIL123を使ってあなたのアカウントにアクセス
対策:ログイン時にID再生成
ログイン前:セッションID = TEMPORARY456
ログイン成功後:新しいセッションID = SECURE789 に変更
→ 古いIDは無効になる
よくある質問(FAQ)
Q1: セッションが切れるのはなぜ?
A: 主に以下の理由があります
- セキュリティ: 長時間放置されたセッションは乗っ取りリスクが高い
- リソース節約: サーバーのメモリを節約するため
- 一般的な設定: 30分〜2時間で自動ログアウトが多い
Q2: プライベートブラウジング(シークレットモード)だとどうなる?
A: より安全ですが、基本は同じ
通常モード:Cookie は永続保存される可能性
シークレットモード:ブラウザを閉じると Cookie は確実に削除
Q3: スマートフォンのアプリはどうなの?
A: Webブラウザではなく専用アプリの場合
Webサイト:Cookie を使ったセッション管理
スマホアプリ:アプリ内に専用の認証情報を保存
→ 仕組みは似ているが、実装方法が違う
Q4: 「ログイン状態を保持する」チェックボックスって何?
A: セッションの有効期限を延長する機能
チェックなし:ブラウザを閉じるとログアウト
チェックあり:2週間〜1ヶ月間ログイン状態維持
実際に確認してみよう
実習:セッションの動きを観察
用意するもの
- パソコンのWebブラウザ
- お気に入りのWebサイト(Amazon、Twitter等)
実習手順
1. セッションの開始を確認
1. シークレットモードで Amazon を開く
2. F12 で開発者ツールを開く
3. Network タブをチェック
4. ページを読み込み
5. Response Headers で「Set-Cookie」を確認
→ セッションIDが送られてきている
2. セッションの継続を確認
1. 商品を検索して別のページに移動
2. Network タブで Request Headers の「Cookie」を確認
→ 先ほどのセッションIDが送られている
3. カートに商品を追加
4. 別のページに移動してもカートが維持されることを確認
3. セッションの終了を確認
1. ブラウザを完全に閉じる
2. 再度サイトを開く
3. カートが空になっていることを確認
→ セッションが終了している
まとめ
セッション管理は、Webサイトがあなたを「覚えている」ための重要な仕組みです。
重要なポイント
- セッションID = あなたを識別する番号(図書館の図書カードのようなもの)
- Cookie = ブラウザがセッションIDを保存する場所
- サーバー側保存 = あなたの情報を記録している場所
- セキュリティ = HTTPS通信と適切な設定が重要
- 有効期限 = 安全のために一定時間で自動切断
身近な体験で理解しよう
次回Webサイトを使う時は、こんなことを意識してみてください:
- ログインした瞬間:「セッションIDをもらった!」
- 別のページに移動:「セッションIDを提示して本人確認」
- カートに商品追加:「セッションIDと一緒に『商品A追加』と記録」
- ブラウザを閉じる:「セッション終了、また今度!」
セッションの仕組みを理解すると、Webサイトの動作がより身近に感じられ、セキュリティ意識も高まります。安全で快適なWebライフを楽しんでください!
さらに学習したい方へ
- Web開発に興味がある: HTMLとJavaScriptから始めてみましょう
- セキュリティが気になる: HTTPS、Cookie設定について調べてみましょう
- 技術的な詳細を知りたい: HTTP/HTTPSプロトコルについて学習してみましょう
この記事がWebセッションの理解の第一歩になれば幸いです!