web-dev-qa-db-ja.com

使用後にセッション変数をクリアする

セッション変数を使用して、直後に設定を解除することはできますか?

例:

//====
//Process Form
if ($_POST['Submit']) {
    $update = $userSettings->update($_POST);

    //If there are form errors
 if (!$update) {
        //Load the errors into an array
        $errors = $update[1];
    } else {
        //Set the session
        $_SESSION['showUpdated'] = true;

        //Redirect to this page
        header("Location: http://www.mysite.com/settings");
    }
}

//==================

if ($_SESSION['showUpdated']) {
 echo "Settings Updated";
    unset($_SESSION['showUpdated'];
}

したがって、フォームが送信された後、エラーがない場合:

  • フォームの送信に問題がないことを伝えるセッションを設定する
  • ページを再読み込みします(再送信を防ぐためにPOST data)
  • 「showUpdated」セッション変数が設定されている場合は、「Updated」メッセージを表示します
  • セッション変数の設定を解除します(次のリロード時にメッセージが表示されないようにするため)。

現在問題は、直後にセッション変数を設定解除した場合です。 「存在する場合」の前に設定を解除したかのようです。

解決策はありますか?これはそれを行うための最良の方法ですか?

どうもありがとう!

12
steveneaston

うまくいくようです。セッションを使用する前に必ずsession_start()を呼び出し、リダイレクトヘッダーの後には必ずexit()またはdie()を呼び出してください。

私はあなたがやっていることを少し違って成し遂げます。セッションで「メッセージ」要素を保持します。 「データは保存されました」などのテキストやエラーメッセージなどを貼り付けます。次に、各ページ(実際にはページテンプレートクラス内)で、$_SESSION['message']が設定され、空ではありません。何かがある場合は、メッセージを表示し、値を空の文字列またはnullに設定します。

3
Scott Saunders

他の問題を引き起こす可能性のある元の例の小さなエラーに気づきました。

unset($_SESSION['showUpdated'];

する必要があります

unset($_SESSION['showUpdated']);

その終わりを含まない) in unsetを指定すると、エラーが発生します。

23
donlaur

私は時々これをします。私はそれで何の問題もありません。しかし、私があなたに追加するのは、ヘッダーのリダイレクト後のexit()関数呼び出しです。

編集:exit()を使用する理由は、それ以上コードを処理できなくなり、リダイレクト後にチェックする前に設定解除される可能性がなくなるためです。

3
spinon

終了せずにヘッダーを呼び出すと、ページの実行が続行されます。

header("Location: http://www.mysite.com/settings");
exit;

代わりにそれを使用すると、ページを強制終了し、同じページ呼び出しでセッション変数の設定を解除しないでください。

2
Brad F Jacobs

存在するかどうかを確認してください。これは、定義される前に行うのが安全であり、定義された後にあなたの答えを教えてくれます。

if(!empty($_SESSION['showUpdated'])) {
1
TheJacobTaylor

または、単にfalseに設定することもできます。

 if($ _SESSION ['showUpdated']){
 echo "設定が更新されました"; 
 $ _SESSION ['showUpdated'] = false; 
} 

また、5.3よりも小さいバージョンのPHP=を使用しているようです。5.3では初期化されていない値を使用すると通知が届くためです。したがって、isset関数を使用する必要があります。

 if(isset($ _ SESSION ['showUpdated'])&& $ _SESSION ['showUpdated']){
 echo "設定が更新されました"; 
 $ _SESSION ['showUpdated'] = false; 
} 
0
tomasbelusky