ThinkPHPフォームの重複提出を防止する方法


しかし、避けられない場合があります。
ユーザーがフォームを提出した後、ブラウザの後退ボタンをクリックしてフォームページに戻ります。この時、ブラウザは直接キャッシュからページを取り出しますので、token認証は必ず通ります。
ネット上ではこの問題を回避する方法がたくさんあります。例えば、locations.replace()方法で現在の歴史記録を置き換えることができますが、それでもまだ傷があります。極端な場合、ユーザーがページ間で何回か切り替えると、複数回の後退ボタンが前のフォームページに戻ってくる可能性があります。
解決方法はhttpの頭の中にCache-Coontrol:no-cacheを設置します。no-store。しかし、私はページheadに
探してみましたが、問題が発生したのはThinkPHPのテンプレートレンダリングメカニズムです。ThinkPHP/Lib/Think/Core/View.class.phpを開いて173行目を見てください。header("Cache-control: private");  // TPはページの往復をサポートするために、各テンプレートの出力前に、Cache-control:prvateの頭を強制的に送りました。これは本当に助かりました。
この行を注釈して、TPコアキャッシュを削除して、もう一度試してみたら、HTTP応答ヘッダが正常に変更されました。