PHP中文网2017-04-18 10:07:45
送信が失敗した場合は、ボタンをクリックした直後にボタンを無効にします。失敗した場合は、成功ページにリダイレクトされます。
またはクリックすると、マスクがポップアップ表示されます。
ただし、上記の解決策はどちらも js が必要です。なぜjsを使いたくないのでしょうか?
迷茫2017-04-18 10:07:45
1.JS ボタンは繰り返しクリックを防ぎます
2. サーバー側のキャッシュ制御、ライブラリを繰り返し書き込む方法です
3. データベース内に一意のインデックスを作成します (たとえば、投稿のタイトルは一意であり、重複することはできません)
阿神2017-04-18 10:07:45
フロントエンドとバックエンドから制御可能:
ユーザーが投稿をクリックすると、[投稿] ボタンを無効にします
投稿リクエストが送信されたときに、その人が同じタイトルと内容の投稿を送信したかどうかを確認し、送信した場合、この重複投稿の作成を禁止します。
迷茫2017-04-18 10:07:45
テンプレートのレンダリング時に ID を生成し、送信時に ID を一緒に送信してバックエンドと比較することができます。これにより、渡された ID が間違っている場合、処理が無視されます。
PHPz2017-04-18 10:07:45
まず、より簡単な解決策は、デバウンス関数を使用して DOM コールバック トリガーの頻度を制限することです。
第二に、この時代でもユーザーが JS を無効にする状況を考慮する必要がある場合は、フロントエンドでそれを行わないでください。
PHP中文网2017-04-18 10:07:45
この問題は、フロントエンドだけに頼って解決することはできません。
キャッシュを追加し、単一マシンにはマップを使用し、分散キャッシュには Redis を使用します。
Mysql のストアド プロシージャを使用して、同時実行の圧力をデータベースに引き渡します
ロック、楽観的ロックまたは悲観的ロック
一意のキー
怪我咯2017-04-18 10:07:45
次に、独自の csrf
を作成し、コンテンツを送信するときにキーを自動的に生成します。それらが同じである場合は、キーをリセットします。単なる重複送信
迷茫2017-04-18 10:07:45
フォームフォームは、非表示フィールドのランダムな文字列を過ぎてポストし、セッションに入れます
プログラムがこのランダムな文字列を受け取り、セッション内の文字列と比較し、同じであれば送信し、そうでない場合は送信します。同じではありません。このセッションをリセットしてください
PHP中文网2017-04-18 10:07:45
1. JS 検証、送信後に送信ボタンを無効にする
2. サーバー側の検証、ページが更新されるたびに、サーバーにデータを送信するときにページ内にトークンが生成されます。トークンが有効かどうかを判断し、その後データが処理されてトークンが破棄されますが、フロントエンドが繰り返し送信すると、トークンが破棄されるため確実に処理されません。