POSTリクエストを処理した後、同じページにリダイレクトするという非常に標準的なことを行っているため、ユーザーがページをリロードした場合に「フォームの再送信の確認」(または同等の) ダイアログが表示されません。
303 応答ステータス コードを使用しています。
コードは次のとおりです。
header( "HTTP/1.1 303 See Other" );
header( "Location: " . $_SERVER['REQUEST_URI'] );
exit();
これは、Safari と FF で期待どおりに機能します。Chrome で [フォームの再送信の確認] ダイアログが表示されます。
Chrome では、ネットワーク インスペクタを使用して、303 リダイレクトが実際に発行され、最初の POST の後に GET があることを確認できます。
それでも、その時点でページをリロードしようとすると、「フォームの再送信の確認」が表示されます。
偽のクエリ パラメータを追加して URL を変更すると、これは発生しません。あれは...
header( "HTTP/1.1 303 See Other" );
header( "Location: " . $_SERVER['REQUEST_URI'] . '?foo' );
exit();
...うまくいきます。
Chrome は巧妙になりすぎて、同じページのリロードを省略しようとしていますか? それとも、これは既知の問題ですか? 私はしばらく時間をかけて調べましたが、PRG パターンを使用する必要があるだけの人が 100 万人いることを除けば、何もありません。