python - 如何防止狂点提交表单按钮导致的数据重复?
高洛峰
高洛峰 2017-04-18 10:05:45
0
12
1657
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(12)
洪涛

送信が失敗した場合は、ボタンをクリックした直後にボタンを無効にします。失敗した場合は、成功ページにリダイレクトされます。

またはクリックすると、マスクがポップアップ表示されます。

ただし、上記の解決策はどちらも js が必要です。なぜjsを使いたくないのでしょうか?

いいねを押す +0
迷茫

1.JS ボタンは繰り返しクリックを防ぎます

2. サーバー側のキャッシュ制御、ライブラリを繰り返し書き込む方法です

3. データベース内に一意のインデックスを作成します (たとえば、投稿のタイトルは一意であり、重複することはできません)

いいねを押す +0
阿神

フロントエンドとバックエンドから制御可能:

  • ユーザーが投稿をクリックすると、[投稿] ボタンを無効にします

  • 投稿リクエストが送信されたときに、その人が同じタイトルと内容の投稿を送信したかどうかを確認し、送信した場合、この重複投稿の作成を禁止します。

いいねを押す +0
迷茫

テンプレートのレンダリング時に ID を生成し、送信時に ID を一緒に送信してバックエンドと比較することができます。これにより、渡された ID が間違っている場合、処理が無視されます。

いいねを押す +0
PHPzhong

まず、より簡単な解決策は、デバウンス関数を使用して DOM コールバック トリガーの頻度を制限することです。

第二に、この時代でもユーザーが JS を無効にする状況を考慮する必要がある場合は、フロントエンドでそれを行わないでください。

いいねを押す +0
洪涛

この問題は、フロントエンドだけに頼って解決することはできません。

  1. キャッシュを追加し、単一マシンにはマップを使用し、分散キャッシュには Redis を使用します。

  2. Mysql のストアド プロシージャを使用して、同時実行の圧力をデータベースに引き渡します

  3. ロック、楽観的ロックまたは悲観的ロック

  4. 一意のキー

いいねを押す +0
刘奇

現在のページは、送信時に一意の ID を生成します。たとえば、laravel のフォーム送信ページには csrf_token

が含まれます。
いいねを押す +0
刘奇

次に、独自の csrf を作成し、コンテンツを送信するときにキーを自動的に生成します。それらが同じである場合は、キーをリセットします。単なる重複送信

いいねを押す +0
迷茫

フォームフォームは、非表示フィールドのランダムな文字列を過ぎてポストし、セッションに入れます
プログラムがこのランダムな文字列を受け取り、セッション内の文字列と比較し、同じであれば送信し、そうでない場合は送信します。同じではありません。このセッションをリセットしてください

だけでエラー比較が求められます。
いいねを押す +0
Ty80

1. JS 検証、送信後に送信ボタンを無効にする
2. サーバー側の検証、ページが更新されるたびに、サーバーにデータを送信するときにページ内にトークンが生成されます。トークンが有効かどうかを判断し、その後データが処理されてトークンが破棄されますが、フロントエンドが繰り返し送信すると、トークンが破棄されるため確実に処理されません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート