web-dev-qa-db-ja.com

PHPのsession_unset()とsession_destroy()の違いは何ですか?

php.net ドキュメントから:

session_destroy—セッションに登録されているすべてのデータを破棄する

session_unset—すべてのセッション変数を解放する

私の3つの部分の質問は次のとおりです。

2つの機能は非常に似ているようです。
実際に2つの違いは何ですか?

どちらも、セッションに登録されているすべての変数を削除するようです。それらのいずれかが実際にセッション自体を破壊しますか?そうでない場合、どのようにこれを達成しますか(セッション自体を破壊します)。

2つの機能のどちらもクライアントでセッションCookieを削除しないのは正しいですか?

83
Johan

session_unset$_SESSION変数をクリアするだけです。それは以下と同じです:

$_SESSION = array();

したがって、これはローカル$_SESSION変数インスタンスにのみ影響し、セッションストレージのセッションデータには影響しません。

それとは対照的に、 session_destroy は、セッションストレージに保存されているセッションデータを破壊します(例:セッションファイルシステム内のファイル)。

他のすべては変更されません。

134
Gumbo

session_destroy();はセッション全体を削除しています。

session_unset();はセッションから変数のみを削除します-セッションはまだ存在します。データのみが切り捨てられます。

16
Xamael

session_unset()は_$_SESSION_変数をクリアします(array()のように)が、セッションファイルには影響しません。ただし、スクリプトが終了すると、 _$_SESSION_の状態がファイルに書き込まれます。その後、ファイルはクリアされますが、削除されません。 session_destroy()を使用すると、_$_SESSION_(var_dump($_SESSION)の後にsession_destroy()を使用)には触れませんが、セッションファイルは削除されるため、スクリプトは終了します_$_SESSION_の状態を書き込むファイルはありません。

5
kaushik

特定の名前または個別のセッション名/単一のセッション名のみを設定解除すると考えて、session_unset($_SESSION['session_name'])を使用しようとしました。ただし、session_unset($_SESSION['session_name'])を使用すると、すべてのセッション名のみが設定解除されます。使用する正しいコードは、単一のセッション名の設定を解除する場合にのみunset($_SESSION['session_name'])です。

0
Marvin

session_destroy()はページの移動後にセッションを削除し、session_unset()はコードの実行時にセッションを削除します。