php.net ドキュメントから:
session_destroy—セッションに登録されているすべてのデータを破棄する
session_unset—すべてのセッション変数を解放する
私の3つの部分の質問は次のとおりです。
2つの機能は非常に似ているようです。
実際に2つの違いは何ですか?
どちらも、セッションに登録されているすべての変数を削除するようです。それらのいずれかが実際にセッション自体を破壊しますか?そうでない場合、どのようにこれを達成しますか(セッション自体を破壊します)。
2つの機能のどちらもクライアントでセッションCookieを削除しないのは正しいですか?
session_unset
は$_SESSION
変数をクリアするだけです。それは以下と同じです:
$_SESSION = array();
したがって、これはローカル$_SESSION
変数インスタンスにのみ影響し、セッションストレージのセッションデータには影響しません。
それとは対照的に、 session_destroy
は、セッションストレージに保存されているセッションデータを破壊します(例:セッションファイルシステム内のファイル)。
他のすべては変更されません。
session_destroy();
はセッション全体を削除しています。
session_unset();
はセッションから変数のみを削除します-セッションはまだ存在します。データのみが切り捨てられます。
session_unset()
は_$_SESSION
_変数をクリアします(array()
のように)が、セッションファイルには影響しません。ただし、スクリプトが終了すると、 _$_SESSION
_の状態がファイルに書き込まれます。その後、ファイルはクリアされますが、削除されません。 session_destroy()
を使用すると、_$_SESSION
_(var_dump($_SESSION)
の後にsession_destroy()
を使用)には触れませんが、セッションファイルは削除されるため、スクリプトは終了します_$_SESSION
_の状態を書き込むファイルはありません。
特定の名前または個別のセッション名/単一のセッション名のみを設定解除すると考えて、session_unset($_SESSION['session_name'])
を使用しようとしました。ただし、session_unset($_SESSION['session_name'])
を使用すると、すべてのセッション名のみが設定解除されます。使用する正しいコードは、単一のセッション名の設定を解除する場合にのみunset($_SESSION['session_name'])
です。
session_destroy()
はページの移動後にセッションを削除し、session_unset()
はコードの実行時にセッションを削除します。