章: 第5章: Web・DB・セキュリティ
「テーマ設定」や「ログイン補助」の機能、Cookieを使って実装していますか?それとも毎回DBに問い合わせていますか?
問題と解決策
ユーザーの表示設定や「次回も自動ログイン」のような情報は、セッションと違ってブラウザを閉じても保持したいケースがあります。セッションはブラウザを閉じると終了しますが、Cookieには有効期限を設定できるため、長期保存に向いています。
ただし、Cookieはクライアント側に保存されるため、JavaScriptから読み取られるリスクがあります。HttpOnly や Secure フラグを適切に設定することがセキュリティ上重要です。
セッション 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に絶対に保存しないでください
次回は パスワードハッシュ — ユーザーのパスワードを安全に保存する仕組みを学びます。