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


88

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

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

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

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

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

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

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

回答:


144

session_unset$_SESSION変数をクリアするだけです。これは、次のことを行うのと同じです。

$_SESSION = array();

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

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

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


@Gumbo session_unset()が非推奨になったことに問題はありませんか?これを確認しましたが、うまくいきませんでした。
navneet 2012

@hakre警告は何ですか?
GoTo 2013

4
@GoTo:そのsession_unsetは、PHP 4で一般的であったように、セッション変数として登録されたグローバル変数の設定を解除するために使用されました。今日の時点でのその関数の使用は時代錯誤であり、必要ありません。それがまだPHPにある唯一の理由は、おそらく下位互換性だけです。新しいコードを書く場合は、それを使用しないでください。コード内で見つかった場合は、PHP 4コードを明示的に処理していない限り、session_register()および残りのPHP4セッション変数処理関数の呼び出しと一緒に削除する必要があります。
hakre 2013

5
それでも紛らわしいです:説明してくださいlocal $_SESSION variable instance vs session data in the session storage。私が知っているように、あなたの主張を理解しなかった私のような1000人のそのような人々がいます。ありがとう
Pratik 2015

1
あなたの答えはあまりにも混乱しています。どちらもセッションを破壊していると思うので、編集を検討してください
Pratik 2015

17

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

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


15
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;

2
あなたの真ん中の例では->session_unset();あなたはまだのセッションを使うことができるのであなたは何もしていません$_SESSION["a"] 、それでそれの使用は何ですか?
Pratik 2015

1
$_SESSION[a]$_SESSION['a'] あなたが言ったこととは異なり、これは最初の例ではNULLではありません
Istiaque Ahmed 2017

5

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



0

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


0

session_start(); #it​​はブラウザのリアルタイムメモリに仮想配列(連想)を作成します

2つのアイテムが追加されました

> $_SESSION['me'] = "Yadab";  
> $_SESSION['you'] = "Avi";
>
> print_r($_SESSION); #will give, array( "me"=>"Yadab", "you"=>"Avi" )

test1

> unset($_SESSION['me']); #only 'me' variable is removed fully (index & value) 
> print_r($_SESSION); #now the array is Array("you"=>"Avi")

test2

> session_destroy(); #will unset the values of all session variables, but indexes exists 
> print_r($_SESSION); #Output, Array("you"=>undefined)
> #but some browser can store the value in cookies

test3

> session_unset(); #will unset all the main variables not only the values 
> print_r($_SESSION); #that means session array is now empty, like Array()

ブロック1、2、または3を個別にテストし、他の人をコメントアウトします


-2

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


答えがわからないということだと思います。これは答えではなくコメントです。
シャイフルイスラム2015

4
session_unset()session_destroy()は無意味でしょう。session_unset()$ _SESSIONスーパーグローバルからすべてのキーと値をクリアするために使用するかsession_destroy()、セッション全体を削除するために使用します。「確認」するためだけに両方を使用するのではなく、関数がその仕事をすることを信頼してください。
redburn 2015年

@redburnsession_destroy()は、現在のページを終了するまでsessスーパーグローバル変数の設定を解除しません。
Yousha Aleayoub
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.