ホームページ >バックエンド開発 >PHPチュートリアル >Forms の繰り返し送信を防ぐ ThinkPHP メソッド_PHP チュートリアル
ただし、回避できない状況が 1 つあります。
ユーザーがフォームを送信した後、ブラウザの戻るボタンをクリックしてフォーム ページに戻ります。このとき、ブラウザはキャッシュからページを直接取得するため、トークンの検証は失敗するはずです。
location.replace() メソッドを使用して現在の履歴レコードを置き換えるなど、インターネット上でこの問題を回避する方法はたくさんありますが、これにはまだ欠陥があります。極端な場合には、ユーザーがページ間を複数回切り替えた場合、「戻る」ボタンを数回クリックすると、前のフォーム ページに戻る可能性があります。
解決策は、http ヘッダーで Cache-Control: no-cache、no-store を設定することです。ただし、ページヘッドに を追加するか、header("Cache-control: no-cache, no-ストア") は無効です。
長い間検索した結果、問題は ThinkPHP のテンプレート レンダリング メカニズムにあることがわかりました。ThinkPHP/Lib/Think/Core/View.class.php を開いて 173 行目を見てください。
header( "キャッシュ制御: プライベート" ); //ページバウンスをサポート
|
この行をコメントアウトし、TPコアキャッシュを削除し、再試行すると、HTTP応答ヘッダーが正常に変更されたことがわかります