2011-09-10 16 views
2

PHPを学ぶのが初めてです。私は次のコードを作成しました。破棄後にPHPのセッションが存在する

<?php 
/* 
* Testing Sessions with PHP 
*/ 
session_start(); 
$_SESSION['user_id'] = 'Testing User'; 
session_destroy(); 
?> 

<html> 
<head> 
    <title> Sessions Page</title> 
</head> 
<body> 
    <?php 
     echo $_SESSION['user_id']; 
    ?> 
</body> 
</html> 

echo $ _SESSION ['user_id'] echosのテストユーザーです。私の意見では、私はセッションを破壊したので、それはすべきではありません。理由は何ですか?

答えて

2

セッション変数の設定を解除する必要があります。 を参照してください。http://php.net/manual/de/function.session-unset.php

セッションを破棄する前に、session_unset()を実行してください。

+0

素晴らしい!それは働いたが、session_unset()とsession_destroy()の違いは何ですか? –

+1

@back http://stackoverflow.com/questions/4303311/what-is-the-difference-between-session-unset-and-session-destroy-in-php – NullUserException

+0

質問はまだ私の心の中に残っています。セッションが破棄されたときに、なぜセッション変数が存在するのですか?これは少なくとも私のためには論理に接続しません。可能であれば、詳しく説明してください。 –

1

これは(何らかの理由で)設計上のようです。あなたが望むことを行う正しい方法です。

session_start(); 
$_SESSION['user_id'] = 'Testing User'; 
session_unset(); 
session_destroy(); 

このコードでは、すべてのセッション変数が$_SESSIONから削除され、セッションが破棄されます。

2

機能session_destroy()は実際にあなたのセッションを破壊します。この場合、セッションはデータを保持しているサーバー上のファイル(またはデータベース)です。つまり、後で他のページでこのセッションにアクセスすることはできません。

globale $ _SESSION []変数は、別の話です。ページ上のコードが処理を開始する前に、セッションファイルから入力します。したがって、データのコピーが保持され、ページの処理が完了するまでメモリに残ります。この変数はsession_unset()でクリアできますが、ページが終了してその変数がすべて破棄されるまで待つこともできます。

+0

@ S.A.Malikなぜこれが正解ではないのですか? – evilReiko

関連する問題