web-dev-qa-db-ja.com

戻るボタンフォームデータの再送信($ _POST)

私の問題は、前のページがフォームによって作成されたときに、戻るボタンが原因でブラウザに「ページの有効期限が切れました」などと表示されることです。

例:

  • page1:検索条件で送信されたフォーム($ _POSTリクエスト、フォームはpage2を指します)
  • page2:$ _ POSTリクエストを受信し、結果を表示します(リンク付きのユーザーのリスト、page3を指す)
  • ページ3:ユーザープロファイルを表示

これで、訪問者がブラウザの[戻る]ボタンをクリックすると、「ページの有効期限が切れました」などのメッセージが表示されます。

代わりに、前のページを警告なしで表示する必要があります(page2、ユーザーリスト付き)

この行動を回避するためのあなたの戦略はどうですか?

19
Cudos

検索パラメータを使用してforを送信する場合は、一部のデータを変更するのではなく、getしようとしています。

したがって、HTTP GETメソッドを使用する必要があります。データを作成/変更する場合は、POST:POSTを使用する必要があり、GETを使用する必要があります。データをフェッチする場合。


または、実行する必要のある作成/変更操作がある場合:

  • フォームは最初に最初のページにPOSTします
    • そのページはいくつかの操作を行います(データベースへの書き込みなど)
    • 次に、Location HTTPヘッダーを使用して、別のページにリダイレクトします。
  • URLで受信したパラメーターからフェッチされたデータを表示するのは、最後のページ、つまりGETリクエストを使用したブラウザーによるクエリです。

これについては、ウィキペディアの Post/Redirect/Get ページを参照してください。

23
Pascal MARTIN
14
Alix Axel

POSTしたスクリプトでLocationヘッダーを送信し、後続のページをポイントします。

検索にPOSTを使用しないでください。検索は何も変更されないため、GETを使用して安全に実行できます。

1
Pim Jager

これはPHPおよびIE8に適用されます。

キャッシュをプライベートに設定する必要があるだけでなく、4つのキャッシュヘッダーを削除する必要があります。これはPHP 5.3でのみ実行できます。PHP 5.2ではZend FrameworkのsetHeader()メソッドを使用する場合にのみ、4つのヘッダーを空白値に設定します。何らかの理由でIE8では4つのヘッダー値を空の値に設定するのに十分ではありません。PHPのコードは次のとおりです。 5.3:

    header_remove("Expires");
    header_remove("Cache-Control");
    header_remove("Pragma");
    header_remove("Last-Modified");
1
Chung Lau

これを行うには、セッションを使用できます。

例えば。

$ _SESSION ['name'] = $ _POST ['name'];

メモリ使用量を最適化するために、プロセスの完了後に変数の設定を解除することを忘れないでください。

0
user7796548