ホームページ >バックエンド開発 >PHPチュートリアル >thinkpad s230u フォームの繰り返し送信を防ぐために ThinkPHP メソッドをひねる

thinkpad s230u フォームの繰り返し送信を防ぐために ThinkPHP メソッドをひねる

WBOY
WBOYオリジナル
2016-07-29 08:46:291415ブラウズ

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

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

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

解決策は、http ヘッダーで Cache-Control: no-cache、no-store を設定することです。しかし、ページの先頭に を追加してみました。長い間検索した結果、問題は ThinkPHP の Open ThinkPHP レンダリング メカニズムにあることがわかりました。 /Lib/Think/Core/View.class.php 173 行目を見てください ThinkPHP 防止表单重复提交的方法

header(この行をコメントアウトし、TPコアキャッシュを削除して再試行すると、HTTP応答ヘッダーが正常に変更されたことがわかります
"Cache-control: private"); ページバウンスをサポートするために、TP は各テンプレートが出力される前に Cache-control: private ヘッダーを送信する必要があることがわかりましたが、これは本当に不利益です。

上記では、thinkpad s230uTwist の内容を含め、フォームの重複送信を防ぐ ThinkPHP の方法を紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。