13

私のphpウェブサイトは次のように流れます:

  • Page1.php には、Page2.php に POST する html フォームがあります。
  • Page2.php は、すべての POST データを SESSION 変数に保存し、Page3.php につながるボタンを持っています。
  • Page3.php には、そのデータを Page4.php に POST する別のフォームがあります。
  • Page4.php は、すべての POST データを SESSION 変数に保存します。

私の問題は、ユーザーが Page4.php の戻るボタンをクリックして Page3.php に戻って入力を変更する必要があることです。Page3.php に戻ると、ページ全体がデフォルトの状態で再レンダリングされるため、フォームは空白になります。

これを回避してユーザーの以前の入力を再表示するには、次のようにします。

<input value="<?php echo $_POST["guest1Ticket"];?> " type="text"  name="guest1Ticket" id="guest1Ticket" onblur="isTicketNumber(this)"  size ="22"/>

これが重要な部分です -<?php echo $_POST["guest1Ticket"];?>

これは機能しますが、別の問題が発生します。ユーザーが (ブラウザを閉じる前に) Page1.php に戻り、Page3.php に到達したときにプロセスを最初からやり直すと、最後の実行からのデータがフォームに読み込まれます。

私がしなければならないことは、ユーザーが Page1.php にアクセスしたときにすべての sdession 変数をクリアすることです。私はこのようにしようとしました:

<?php 
 session_start(); 
 session_unset(); 
 session_destroy(); 
?> 

(上記は私のファイルの一番上にあり、最初の文字の前に空白はありません。)

Page1.php のロード時に警告は生成されませんが、セッション変数は設定解除されません。Page3.php に到達すると、最後の実行からのデータがまだフォームに入力されています。

セッション データを正しく消去するにはどうすればよいですか?

ところで、私はこれがChromeで動作するために必要なだけで、それがテスト中です。

4

3 に答える 3

15

$ _SESSIONを使用しない古い非推奨のコードには、session_unset()のみを使用してください。

session_destroyマニュアルを参照してください

例あなたはそれがどのように機能するかを試すことができます

session.php

<?php
session_start();
$_SESSION = array('session1'=>1,'session2'=>2);

echo $_SESSION['session1']; //1
$_SESSION['session1'] = 3;
echo "<pre>";
print_r($_SESSION); //session one now updated to 3
echo "</pre>";


$_SESSION = array();
if ($_SESSION['session1']) {
 echo $_SESSION['session1']; //  IS NOW EMPTY
} else {
 echo "woops... nothing found";
}
?>
<p>
<a href="destroyed.php">NOW GOING TO DESTROYED PHP<a/>
</p>

<?php
session_destroy();
?>

destroy.php

<?php
session_start(); // calling session start first on destroyed.php

print_r($_SESSION); // prints Array ( )  
?>
于 2013-03-19T05:41:43.443 に答える
3

ドキュメントから:

If $_SESSION (or $HTTP_SESSION_VARS for PHP 4.0.6 or less) is used,
use unset() to unregister a session variable, i.e. unset ($_SESSION['varname']);

そして、session_destroyに注意してください:

session_destroyは、現在のセッションに関連付けられているすべてのデータを破棄します。セッションに関連付けられているグローバル変数の設定を解除しません

于 2013-03-19T05:40:03.680 に答える
1

session_unset() を使用します。このような:

<?php session_start(); ?><!DOCTYPE html>
<html>
  <body>
    <?php
      $_SESSION["variabletounset"] = "I am going to be unset soon along with all of the other session variables.";
      print '<pre>' . "\n";
      print_r($_SESSION);
      print '    </pre>' . "\n";

      session_unset();

      print '    <pre>' . "\n";
      print_r($_SESSION);
      print '    </pre>' . "\n";
    ?>
  </body>
</html>

これは次のように出力されます。

Array
(
variabletounset => I am going to be unset soon along with all of the other session variables.
)

Array
(
)
于 2015-07-12T14:44:15.627 に答える