2013-08-31 13 views
6

は、session_destroy()機能の説明である:PHPでsession_destroy()は何をしますか? PHPマニュアルで

session_destroy()は、現在のセッションに関連付けられたすべてのデータを破壊します。セッションに関連するグローバル変数の設定を解除したり、セッションCookieの設定を解除したりすることはありません。セッション変数を再度使用するには、session_start()を呼び出す必要があります。

この説明については混乱します。この関数がすべてのセッションデータを破壊する場合、そのセッションに関連するグローバル変数が設定されていないのはなぜですか?セッション変数を再び使用できるのはなぜですか?

+0

私はあなたが同じページの次のパラを見逃したと思います:セッションを完全に終了させるために、ユーザーをログアウトするように、セッションIDも設定解除する必要があります。Cookieを使用してセッションIDを伝播する場合(デフォルトの動作)、セッションCookieを削除する必要があります。それにはsetcookie()を使用することができます。 – Satya

+0

'xこの関数がすべてのセッションデータを破壊した場合、そのセッションに関連するグローバル変数はなぜ設定されていないのですか?グローバル変数は、次の要求時に消えます。 –

+0

セッションがすでに破棄されているため、そのセッションに関連付けられている* think *というグローバル変数は、そのセッションに関連付けられていません。変数は変数として使用できますが、セッション変数としては使用できません。変数を破壊する理由はないので、どうしてあなたの質問に追加する必要があるのでしょうか?そうでなければ何を考えているのでしょうか?おそらく、あなたに助けが必要な具体的な問題がありますか? – hakre

答えて

5

この説明については混乱します。この[session_destroy()]関数がすべてのセッションデータを破壊すると、そのセッションに関連するグローバル変数が設定されていないのはなぜですか?セッション変数を再び使用できるのはなぜですか?

セッションデータは、セッションに関連付けられたデータです。セッションは、その名前(セッション名)とそのID(セッションID)によって定義されます。

この関数を使用すると、このセッション(name + id)のデータはすべて破棄されます。

データを読み込み/設定できる変数コンテナがあるので、そのデータを操作することができます(たとえば、最後のアクティビティと同様の情報があり、これがログアウトで、最後のアクティビティログアウト時などにいくつかのログやデータベースに知っているのですが、なぜそれを削除すればいいのでしょうか?セッションを高速に破棄(またはコミット)したいので、生産性が悪いです。たとえば、読み取り専用アクセスが必要な場合、メモリが必要ですが、セッションを既にコミットしておく必要はありません)。

これらの変数でさえも$_SESSION経由でアクセスしていることに注意してください。これらの変数はセッションの一部ではありません。多分それは混乱する部分ですか?

私の説明は完全に正しいわけではありません。 PHPはセッションデータをIDだけで内部的に識別し、セッション名を変更することができ、session_destroy()はセッションIDが変更されていないためセッションデータを削除します。

+0

ありがとうございます。私は最初に説明を誤解しました。私はセッション変数を使ってセッションデータを混乱させました。 – PixelsTech

1

session_destroy()は、セッションデータが保存されているセッションファイルを削除します。ここを見て:

<?php 

session_save_path('./session/'); 

session_start(); 
$_SESSION['v'] = array('foo' => 123, 'bar' => 'spam'); 
$_SESSION['m'] = "rocky"; 

if(isset($_GET['delete']) == 'true') 
    session_destroy(); 

?> 

私はセッションを作成し、10vの値を設定しwhitchスクリプトを持っており、それが./sessionという名前のフォルダに同じスクリプトのパスにセッションデータを保存します。

ページを開き、./sessionディレクトリを参照すると、sess_4r7ldo7s5hsctu3fgtvfmf4sd0という名前のファイルが表示されます。

v|a:2:{s:3:"foo";i:123;s:3:"bar";s:4:"spam";}m|s:5:"rocky"; 

を有効session_destroy()ページへ?delete=trueを渡すことによって、セッションファイルを簡単に削除されます:。セッションデータが格納されているとそれが含まれている場所です

関連する問題