ホームページ > php教程 > php手册 > フォームの繰り返し送信を防ぐ ThinkPHP メソッド

フォームの繰り返し送信を防ぐ ThinkPHP メソッド

WBOY
リリース: 2016-06-13 12:05:50
オリジナル
1296 人が閲覧しました

ただし、回避できない状況が 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("Cache-control: private");  //支持页面回跳

ページ バウンスをサポートするために、TP は各テンプレートが出力される前に Cache-control: private ヘッダーを送信する必要があることがわかりました。これは本当に無駄です。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート