第8章 リクエスト情報 / 第2回 模擬試験
PHPのCookieに関する次の記述のうち、正しいものはどれか。
`setcookie()`関数はHTMLの出力を開始した後でも呼び出せる。
Cookieはサーバ側のディスクに保存される。
Cookieに保存されたデータは`$_COOKIE`スーパーグローバル変数で読み取れる。
正解
Cookieの有効期限を指定しない場合、無期限に保存される。
解説
`setcookie()`でブラウザに保存されたCookieのデータは、以降のリクエストで自動的に`$_COOKIE`スーパーグローバル変数に格納され、PHPから読み取れます。
他の選択肢が誤りである理由は次の通りです。
・`setcookie()`はHTTPレスポンスヘッダー(`Set-Cookie`)を送信する関数のため、`echo`などによるHTML出力が既に始まった後に呼び出すと「ヘッダーは既に送信されています」というエラーになります。
・Cookieはサーバ側ではなく、クライアント(ブラウザ)側に保存されます。
・`setcookie()`で有効期限(第3引数の`expire`)を指定しない場合、そのCookieは「セッションCookie」となり、ブラウザを閉じると削除されます(無期限に保存されるわけではありません)。
例:
```
setcookie('lang', 'ja', time() + 60 * 60 * 24 * 30); // 30日間保持
// ... ヘッダー送信前にここまで完了させる必要がある
echo $_COOKIE['lang'] ?? 'ja'; // 次回以降のリクエストで読み取り可能
```
(参照: 独習PHP 第4版 第8章 リクエスト情報 8.6節 クッキー情報 p.381〜386)