ホームページ >ウェブフロントエンド >jsチュートリアル >よくあるフォームの重複送信の問題と解決策_JavaScript スキル

よくあるフォームの重複送信の問題と解決策_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 17:15:411062ブラウズ

/**
*
* @著者ベンジャミン
* @日付 2013-11-13 10:16:59
*/

1. よくある重複送信の問題
a> 送信ボタンを 2 回クリックします。
b>更新ボタンをクリックします。
c>ブラウザの戻るボタンを使用して前の操作を繰り返すと、フォームが繰り返し送信されます。
d> ブラウザの履歴を使用してフォームの送信を繰り返します。
e> ブラウザからの HTTP リクエストが重複します。

2. フォームの繰り返し送信を防ぐ方法
a> 送信ボタンを無効にします。フォームが送信された後、現在のボタンを無効にするか、ボタンのクリック イベントまたはデフォルト イベントをキャンセルします。このアプローチにより、せっかちなユーザーがボタンを複数回クリックすることがなくなります。ただし、クライアントで Javascript が無効になっている場合、この方法が効果的になることはほとんどありません。

b>投稿/リダイレクト/取得モード。送信後にページ リダイレクトを実行することは、いわゆる Post-Redirect-Get (PRG) パターンです。つまり、ユーザーがフォームを送信すると、クライアント側のリダイレクトが実行され、送信成功情報ページに移動します。これにより、ユーザーが F5 キーを押すことによって発生する繰り返し送信を回避でき、ブラウザ フォームの繰り返し送信についての警告も表示されなくなり、ブラウザの進むボタンと戻るボタンを押すことによって引き起こされる同じ問題も回避できます。

c> Cookie を使用してフォームの繰り返し送信を処理します
PHP での実装:

コードをコピーします は次のとおりです:

lt;?php
if(isset($_POST['go'])){
setcookie("tempcookie","",time() 30 );
header("Location:".$_SERVER[PHP_SELF]);exit();
} if(isset($_COOKIE["tempcookie"])){
setcookie("tempcookie", "", 0);echo "フォームはすでに送信されています";
}
?>

特別なフラグをセッションに保存します。フォーム ページが要求されると、特殊な文字列が生成されてセッションに保存され、フォームの非表示フィールドに配置されます。フォーム データを受け入れて処理するときは、識別文字列が存在するかどうかを確認し、直ちにセッションから削除して、データを通常どおり処理します。フォーム送信に有効なフラグ文字列がないことが判明した場合、フォームはすでに送信されており、この送信は無視されることを意味します。これにより、Web アプリケーションにさらに高度な XSRF 保護が提供されます。

e> データベースに制約を追加します。データの重複を防ぐために、データベースに一意の制約を追加するか、一意のインデックスを作成します。これは、データの重複送信を防ぐ最も効果的な方法です。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。