ホームページ >バックエンド開発 >PHPチュートリアル >Forms の繰り返し送信を防ぐ ThinkPHP メソッド_PHP チュートリアル

Forms の繰り返し送信を防ぐ ThinkPHP メソッド_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:25:01917ブラウズ

ただし、回避できない状況が 1 つあります。

ユーザーがフォームを送信した後、ブラウザの戻るボタンをクリックしてフォーム ページに戻ります。このとき、ブラウザはキャッシュからページを直接取得するため、トークンの検証は失敗するはずです。

location.replace() メソッドを使用して現在の履歴レコードを置き換えるなど、インターネット上でこの問題を回避する方法はたくさんありますが、これにはまだ欠陥があります。極端な場合には、ユーザーがページ間を複数回切り替えた場合、「戻る」ボタンを数回クリックすると、前のフォーム ページに戻る可能性があります。

解決策は、http ヘッダーで Cache-Control: no-cache、no-store を設定することです。ただし、ページヘッドに を追加するか、header("Cache-control: no-cache, no-ストア") は無効です。

Forms の繰り返し送信を防ぐ ThinkPHP メソッド_PHP チュートリアル

長い間検索した結果、問題は ThinkPHP のテンプレート レンダリング メカニズムにあることがわかりました。ThinkPHP/Lib/Think/Core/View.class.php を開いて 173 行目を見てください。

header("キャッシュ制御: プライベート"); //ページバウンスをサポート
ページバウンスをサポートするために、TP は各テンプレートが出力される前に Cache-control: private ヘッダーを送信する必要があることがわかりました。これは本当に無駄です。

この行をコメントアウトし、TPコアキャッシュを削除し、再試行すると、HTTP応答ヘッダーが正常に変更されたことがわかります

Forms の繰り返し送信を防ぐ ThinkPHP メソッド_PHP チュートリアル

http://www.bkjia.com/PHPjc/324205.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/324205.html技術記事ただし、回避できない状況があります。ユーザーがフォームを送信した後、ブラウザの戻るボタンをクリックしてフォーム ページに戻ると、ブラウザはキャッシュからページを直接取得するため...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。