拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
送信が失敗した場合は、ボタンをクリックした直後にボタンを無効にします。失敗した場合は、成功ページにリダイレクトされます。
またはクリックすると、マスクがポップアップ表示されます。
ただし、上記の解決策はどちらも js が必要です。なぜjsを使いたくないのでしょうか?
1.JS ボタンは繰り返しクリックを防ぎます
2. サーバー側のキャッシュ制御、ライブラリを繰り返し書き込む方法です
3. データベース内に一意のインデックスを作成します (たとえば、投稿のタイトルは一意であり、重複することはできません)
フロントエンドとバックエンドから制御可能:
ユーザーが投稿をクリックすると、[投稿] ボタンを無効にします
投稿リクエストが送信されたときに、その人が同じタイトルと内容の投稿を送信したかどうかを確認し、送信した場合、この重複投稿の作成を禁止します。
テンプレートのレンダリング時に ID を生成し、送信時に ID を一緒に送信してバックエンドと比較することができます。これにより、渡された ID が間違っている場合、処理が無視されます。
まず、より簡単な解決策は、デバウンス関数を使用して DOM コールバック トリガーの頻度を制限することです。
第二に、この時代でもユーザーが JS を無効にする状況を考慮する必要がある場合は、フロントエンドでそれを行わないでください。
この問題は、フロントエンドだけに頼って解決することはできません。
キャッシュを追加し、単一マシンにはマップを使用し、分散キャッシュには Redis を使用します。
Mysql のストアド プロシージャを使用して、同時実行の圧力をデータベースに引き渡します
ロック、楽観的ロックまたは悲観的ロック
一意のキー
現在のページは、送信時に一意の ID を生成します。たとえば、laravel のフォーム送信ページには csrf_token
laravel
csrf_token
次に、独自の csrf を作成し、コンテンツを送信するときにキーを自動的に生成します。それらが同じである場合は、キーをリセットします。単なる重複送信
csrf
フォームフォームは、非表示フィールドのランダムな文字列を過ぎてポストし、セッションに入れますプログラムがこのランダムな文字列を受け取り、セッション内の文字列と比較し、同じであれば送信し、そうでない場合は送信します。同じではありません。このセッションをリセットしてください
1. JS 検証、送信後に送信ボタンを無効にする 2. サーバー側の検証、ページが更新されるたびに、サーバーにデータを送信するときにページ内にトークンが生成されます。トークンが有効かどうかを判断し、その後データが処理されてトークンが破棄されますが、フロントエンドが繰り返し送信すると、トークンが破棄されるため確実に処理されません。
送信が失敗した場合は、ボタンをクリックした直後にボタンを無効にします。失敗した場合は、成功ページにリダイレクトされます。
またはクリックすると、マスクがポップアップ表示されます。
ただし、上記の解決策はどちらも js が必要です。なぜjsを使いたくないのでしょうか?
1.JS ボタンは繰り返しクリックを防ぎます
2. サーバー側のキャッシュ制御、ライブラリを繰り返し書き込む方法です
3. データベース内に一意のインデックスを作成します (たとえば、投稿のタイトルは一意であり、重複することはできません)
フロントエンドとバックエンドから制御可能:
ユーザーが投稿をクリックすると、[投稿] ボタンを無効にします
投稿リクエストが送信されたときに、その人が同じタイトルと内容の投稿を送信したかどうかを確認し、送信した場合、この重複投稿の作成を禁止します。
テンプレートのレンダリング時に ID を生成し、送信時に ID を一緒に送信してバックエンドと比較することができます。これにより、渡された ID が間違っている場合、処理が無視されます。
まず、より簡単な解決策は、デバウンス関数を使用して DOM コールバック トリガーの頻度を制限することです。
第二に、この時代でもユーザーが JS を無効にする状況を考慮する必要がある場合は、フロントエンドでそれを行わないでください。
この問題は、フロントエンドだけに頼って解決することはできません。
キャッシュを追加し、単一マシンにはマップを使用し、分散キャッシュには Redis を使用します。
Mysql のストアド プロシージャを使用して、同時実行の圧力をデータベースに引き渡します
ロック、楽観的ロックまたは悲観的ロック
一意のキー
現在のページは、送信時に一意の ID を生成します。たとえば、
が含まれます。laravel
のフォーム送信ページにはcsrf_token
次に、独自の
csrf
を作成し、コンテンツを送信するときにキーを自動的に生成します。それらが同じである場合は、キーをリセットします。単なる重複送信フォームフォームは、非表示フィールドのランダムな文字列を過ぎてポストし、セッションに入れます
だけでエラー比較が求められます。プログラムがこのランダムな文字列を受け取り、セッション内の文字列と比較し、同じであれば送信し、そうでない場合は送信します。同じではありません。このセッションをリセットしてください
1. JS 検証、送信後に送信ボタンを無効にする
2. サーバー側の検証、ページが更新されるたびに、サーバーにデータを送信するときにページ内にトークンが生成されます。トークンが有効かどうかを判断し、その後データが処理されてトークンが破棄されますが、フロントエンドが繰り返し送信すると、トークンが破棄されるため確実に処理されません。