第46回: Cookie — クライアントに小さな情報を預ける技術

章: 第5章: Web・DB・セキュリティ

「テーマ設定」や「ログイン補助」の機能、Cookieを使って実装していますか?それとも毎回DBに問い合わせていますか?

問題と解決策

ユーザーの表示設定や「次回も自動ログイン」のような情報は、セッションと違ってブラウザを閉じても保持したいケースがあります。セッションはブラウザを閉じると終了しますが、Cookieには有効期限を設定できるため、長期保存に向いています。

ただし、Cookieはクライアント側に保存されるため、JavaScriptから読み取られるリスクがあります。HttpOnlySecure フラグを適切に設定することがセキュリティ上重要です。

セッション vs Cookie の用途比較

用途 セッション Cookie
ログイン中のユーザーID ✅ 適している ❌ 危険
表示テーマ設定 △ ブラウザを閉じると消える ✅ 適している
カート内容(短期) ✅ 適している △ 容量制限あり
自動ログイントークン ❌ 向かない ✅ 適している(HttpOnlyで)

チェックポイント: setcookie() の第5引数($secure)を true にして、HTTPS環境でのみCookieを送信するよう設定していますか?HTTPで送信するとCookieが盗聴されるリスクがあります。

コードサンプル


<?php
setcookie('theme', 'light', time() + 3600, '/');
echo $_COOKIE['theme'] ?? 'default';

まとめ & 次のステップ

  • Cookieはブラウザ側に保存され、有効期限を設定できます
  • HttpOnly フラグでJavaScriptからのアクセスを防ぎます
  • Secure フラグでHTTPS通信時のみ送信するよう制限します
  • 機密情報(パスワード等)はCookieに絶対に保存しないでください

次回は パスワードハッシュ — ユーザーのパスワードを安全に保存する仕組みを学びます。

Related Articles