章: 第5章: Web・DB・セキュリティ
「ログインしたはずなのに、次のページで認証が切れる」—— その原因、HTTPの仕組みにあります。
問題と解決策
HTTPはリクエストごとに独立した「ステートレス」なプロトコルです。つまり、ページを移動するたびに「誰がリクエストしたか」という情報が消えてしまいます。
セッションはこの問題を解決します。サーバー側に一時データを保存し、ブラウザにはセッションIDだけをCookieとして渡すことで、複数リクエストにまたがって状態(例:ログイン中のユーザーID)を維持できます。
セッション vs Cookie の比較
| 特徴 | セッション | Cookie |
| データの保存場所 | サーバー側 | クライアント(ブラウザ)側 |
| セキュリティ | 比較的高い | 改ざんリスクあり |
| 保存できるデータ量 | 大きい | 4KB程度まで |
| 典型的な用途 | ログイン状態・カート内容 | 表示設定・ログイン補助 |
チェックポイント:
session_start()はページの最初(HTMLを出力する前)に呼んでいますか?ヘッダー送信後に呼ぶとエラーになります。
コードサンプル
<?php
session_start();
$_SESSION['user_id'] = 123;
echo $_SESSION['user_id'];
まとめ & 次のステップ
session_start()はページの先頭(出力より前)で呼ぶ必要があります- データはサーバー側の
$_SESSIONに保存し、クライアントにはIDのみ渡します - セッションハイジャック対策として
session_regenerate_id(true)をログイン直後に呼びましょう - セッションはHTTPのステートレス性を補う基本的な仕組みです
次回は Cookie — クライアント側に情報を保存する技術と、セッションとの使い分けを学びます。