19

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

例:

  • page1: 検索条件とともに送信されたフォーム ($_POST リクエスト、フォームは page2 を指します)
  • page2: $_POST リクエストを受け取り、結果を表示します (リンクのあるユーザーのリスト、page3 へのポイント)
  • page3: ユーザー プロフィールを表示

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

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

この動作を回避するための戦略はどのようになっていますか?

4

6 に答える 6

23

検索パラメーターを含むフォームを送信している場合は、一部のデータを変更するのではなく、一部のデータを取得しようとしています。

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

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

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

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

于 2010-01-27T11:34:54.090 に答える
14

Post/Redirect/Get (PRG) パターンを使用します。

PRGパターン

于 2010-01-27T11:33:38.867 に答える
1

これは 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");
于 2011-09-19T20:31:26.373 に答える
1

LocationPOST 先のスクリプトでヘッダーを送信し、次のページを指します。

于 2010-01-27T11:31:10.183 に答える
1

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

于 2010-01-27T11:35:48.060 に答える