2012-03-02 20 views
5

session_destroy()の機能は何ですか?グローバル配列$ _SESSION内のすべてのセッション変数を削除するには、session_unset()を使用する必要があります。クライアントブラウザ(セッションIDと名前を削除)私は未設定のクッキーを持っているからセッションを削除するには:なぜsession_ destroy()が必要ですか?

unset($_COOKIES[session_id()]); 
unset($_COOKIES[session_name()]); 

なぜsession_destroy()機能が必要とされていますか?

+0

http://us.php.net/manual/en/function.session-destroy.php –

+0

ありがとう、私は何度も読んだことがありますが、それは何を理解できません。なぜそれが本当にセッションを破壊しないのか?セッションを破壊するには、さらに2つのステップを使用する必要があります。しかし、実際にはsession_destroy()は私のためにそれらのステップを行う必要があります。 – Green

+2

*別のコード*の答えがあなたに必要な情報を提供している(私はそれができなかった方法を見ることができません)、あなたはそれを受け入れるでしょうか?これは通常、ここで何が行われるのかです:p – RobinJ

答えて

11

session_destroy()はセッション全体を終了します。つまり、PHPのセッション記憶域から削除され、再度使用することはできません。セッション変数とCookieの設定を解除するだけの場合でも、セッションはアクティブなサーバー側になり、セッション変数が再設定され、元のセッションIDのCookieが再びクライアントに送信されると、リサイクルされる可能性があります。

別の言い方をすると、セッションは、基本的に、そのセッションに登録されたセッション変数とともに、Webサーバーのどこかに格納された秘密のIDで構成されます。セッションIDはクライアントに(通常はクッキーとして)送信されるので、クライアントは後の要求でセッションの「所有者」として識別することができます。セッションが既に作成し、そこに登録された変数を持っているされていると仮定すると、ここでの機能は何をすべきかの概要です:

  • session_start()は、クライアントが$_SESSIONにセッションレジストリから送信されたセッションIDに属するすべてのセッション変数をインポート配列
  • session_unset()またはunset()$_SESSION上の変数は、現在のセッションに登録されているすべての変数をクリアしますが、それはがない明確なクライアントのセッションCookieの設定解除セッション自体
  • は、CLIへの合図になるだろう呼び出しますセッションが終了したが、このは、はサーバー上のセッションレジストリからセッションを削除しません。
  • session_destroy()は、セッションを実際にセッションレジストリから削除する唯一の機能であり、文字通りセッションを破棄します

session_destroy()は、すべてのセッション変数の登録を解除しますが、それは現在実行中ですスクリプトで$_SESSION配列をクリアしないので、それはバグやセキュリティ問題を防ぐために、セッション変数の設定を解除するためにまだ良い考えです。 (PHP 4.0.6以下または$HTTP_SESSION_VARS$_SESSIONが使用される場合にunset()を使用し、

:関連ノートで

は、PHPマニュアルは、 $_SESSIONから session_unset()むしろ解除キーを使用しないことをお勧めしますセッション変数、つまり unset($_SESSION['varname']);の登録を解除します。

+0

'$ _SESSIONを使用しない古い廃止予定のコードに対してのみsession_unset()を使用します。' すべてのセッション変数を解放するには、次のようにします。 ' $ _SESSION = array() ' – MTVS

関連する問題