アンチシェイク関数とは、ユーザーがイベントを複数回迅速にトリガーすると、イベント処理機能を1回だけ実行できるようになり、最後のトリガー後の期間内に再検討が防止されるという事実を指します。 Web開発では、ユーザーがフォームを繰り返し送信できないようにすることが非常に重要です。これは、繰り返し提出がデータの冗長性、サーバーの負担の増加、さらには論理エラーにつながる可能性があるためです。
シンプルで効果的な方法は、セッションを使用してユーザーの最後の提出のタイムスタンプを記録し、現在の時間と最後の提出時間の間の間隔を比較することにより、提出が許可されるかどうかを判断することです。次の例は、特定の実装を示しています。
//セッションをオンにします session_start(); <p>//今のタイムスタンプを得るします<br> $ currentTimestamp = time();</p> <p>//やっとに提案しますされたタイムスタンプを得るします<br> $ lastTimestamp = $ _Session ['lastTimestamp'] ?? 0;</p> <p>//時間間隔が指定されたアンチシェイク時間よりも短いいかどうかを判断します(たとえば、52番)<br> if($ currentTimestamp -$ lastTimestamp <5){<br> エコー「提案しますを繰り戻るさないでください」;<br> 出口;<br> }</p> <p>//提案しますのやっとのタイムスタンプを更新しますします<br> $ _Session ['lastTimestamp'] = $ currentTimestamp;<br>
このコードは、2つの提出時間間隔が設定値よりも少ないかどうかを判断することにより、ユーザーが短時間でフォームを繰り返し送信することを避けます。使用するときは、スクリプトがSESSION_START()を呼び出し始めて、セッションサポートを有効にしていることを確認してください。
もう1つの安全なアンチシェイク方法は、トークンを使用することです。フォームがレンダリングされるたびに、ユニークなトークンが生成され、セッションで保存され、隠されたフィールドとしてフォームに配置されます。提出するとき、背景はトークンが一致するかどうかを確認し、それによってそれが重複した提出であるかどうかを決定します。
//セッションをオンにします session_start(); <p>//一意のトークンを生成するします<br> $ token = md5(uniqid(rand()、true));</p> <p>//セッションでトークンを保存します<br> $ _Session ['token'] = $ token;</p> <p>//フォームでトークンをフェリーします<br> エコー '<input type="hidden" name="token" value="' . $token . '"> ';</p> <p>//フォームの送信を処理するときにトークンを確認します<br> if($ _post ['token']!== $ _session ['token']){<br> エコー「提案しますを繰り戻るさないでください」;<br> 出口;<br> }</p> <p>//フォームデータの処理を続けます<br> // ...<br>
この方法は、フォームが繰り返し提出されるのを効果的に防止し、偽造が困難です。より厳格なデータ保護が必要なシナリオに適しています。
セッションタイムスタンプコントロールとトークン検証の2つの方法により、PHP開発者は、ユーザーのフォームの繰り返しの提出によって引き起こされる問題を効果的に回避するために、アンチシェイク機能を柔軟に実装できます。選択する特定の計画は、実際のプロジェクトの要件と安全要件に従って調整できます。上記の例が、プロジェクト開発のための実用的なリファレンスを提供できることを願っています。