第45回: セッション — HTTPを超えてログイン状態を保持する仕組み

章: 第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 — クライアント側に情報を保存する技術と、セッションとの使い分けを学びます。

Related Articles