第8章 リクエスト情報 / 第5回 模擬試験
PHPのセッションを破棄する処理に関する次の記述のうち、正しいものはどれか。
セッションを完全に破棄するには、`$_SESSION`のクリアに加えて`session_destroy()`を呼び出すのが一般的である。
正解
セッションは一度開始すると、プログラムから破棄することは一切できない。
`session_destroy()`はCookie自体を自動的に必ず削除する。
セッションの破棄にはデータベースへの接続が必須である。
解説
セッションを完全に破棄するには、まず`$_SESSION = [];`(または`session_unset()`)でセッション変数の中身をクリアし、そのうえで`session_destroy()`を呼び出してサーバー側に保存されているセッションデータ自体を削除する、という手順が一般的です。
他の選択肢が誤りである理由は次の通りです。
・セッションは`session_destroy()`などの関数でプログラムから明示的に破棄できます。「一切できない」というのは誤りです。
・`session_destroy()`はサーバー側のセッションデータを削除するだけで、クライアント側のセッションCookie自体を自動的に削除するわけではありません。Cookieも確実に削除したい場合は、別途Cookieの有効期限を過去にする処理が必要です。
・セッションの破棄はサーバー側のファイル等に保存されたデータを削除する処理で、データベースへの接続は必須ではありません。
例:
```
session_start();
$_SESSION = [];
session_destroy();
```
(参照: 独習PHP 第4版 第8章 リクエスト情報 8.7.3節 セッションを破棄する p.391〜393)