90

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

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

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

私の3部構成の質問は次のとおりです。

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

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

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

4

8 に答える 8

148

session_unset$_SESSION変数をクリアするだけです。次のようにするのと同じです:

$_SESSION = array();

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

それに対してsession_destroy、セッション ストレージに格納されているセッション データ (ファイル システム内のセッション ファイルなど) を破棄します。

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

于 2010-11-30T10:20:37.803 に答える
19

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

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

于 2010-11-29T11:37:51.193 に答える
16
session_unset();

すべてのセッション変数のすべてのデータをクリアするだけです。


session_destroy();

すべてのセッションを削除します。


session_start();
session_destroy();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]ですNULL


session_start();
session_unset();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]です1234


だから、私は使用します:

session_start();
session_destroy();   
session_start();  
$a = "1234";
$_SESSION[a] = $a;
于 2011-07-01T01:49:31.463 に答える
7

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

于 2014-12-10T03:07:07.857 に答える
-2

セッションデータが確実に削除されるようにするには、 session_destroy() と session_unset() を同時に使用する必要があると思います。

于 2015-05-02T13:14:53.027 に答える