ホームページ > バックエンド開発 > PHPチュートリアル > PHPページの重複送信を防ぐ方法まとめ_PHPチュートリアル

PHPページの重複送信を防ぐ方法まとめ_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:25:08
オリジナル
979 人が閲覧しました

1. 送信ボタンを無効に設定します

ユーザーが送信すると、ボタンはすぐに無効になります。これはjsを使って実装されています。


コードを送信する前にコードをコピーしてください:

$ ("#Submit"). Attr ('Disabled', 'TRUE'); $ ("#Submit"); );


................................................................................... ...................................
実行後、ボタンを元の状態に設定します
コードをコピー

コードは次のとおりです

アイデア: ユーザーがボタンを送信すると、トークンが生成され (トークンはビジネス送信ごとに一意の値です)、セッションに保存され、有効期限が設定されます。ユーザーが再度送信するときに、トークンが一貫していて期限切れであるかどうかを確認します。一貫性があり、期限切れになっていない場合は、2 回送信されたとみなされます。プログラムの実行中にエラーが発生した場合、セッションに保存されている値をクリアする必要があります。手順は以下をご覧ください

コードをコピー コードは次のとおりです:
function checkRepeatSubmit($uniqueid = '', $expire = 30) {

$uniqueid = empty($uniqueid) ? Yii::app()->user->id . Yii::app()->name 。 ->mihome: $uniqueid;
$token = md5("wms_check_repeat" . $uniqueid);

$time = time();
if (isset($_SESSION['token']) && !empty($_SESSION['token']) && $_SESSION['token'] == $token && ($time - $_SESSION['expire_time'] < ; $期限切れ)) {

return false;

false を返します。 S $ _Session ['token'] = $ token;

$ _Session ['Expire_time'] = $ Time; // session この関数を使用して、すぐに書き込みます session_write_close ( Cure ; return true ; //保存された値を削除します
関数 cancelRepeatSubmit() {
(設定解除 ($ _ session ['token']); 設定解除 ($ _ session ['expire_time']);

アイデア: ページがインストールされると、トークンが生成され、セッションに保存され、フォームに書き込まれます。フォームが送信されると、サーバーはセッションに保存されているトークンとトークンを比較し、ページが送信されると、セッションに保存されているトークンが破棄されます。 2 回目は、セッションに保存されたトークンが原因で、トークンが存在せず、エラーが報告されます。以下はコードです
​​

コードをコピーします

コードは次のとおりです:


/**
.値が存在しない場合、エラーが報告されます
* @param type $uniqueid
* @return type
*/
関数 createToken($uniqueid) {

$uniqueid = empty($uniqueid) ? Yii::app()->user->id . Yii::app()->user 。 ->mihome : $uniqueid;
を使用する - -
セッション_write_close();


$token を返す;
関数 checkToken($token) {

if (!isset($_SESSION['form_token']) || empty($_SESSION['form_token']) || $_SESSION['form_token'] != $token) {

return false;

unset($_SESSION ['form_token']);
true を返します。
上記 3 つの方法をまとめましたが、個人的には、1 つ目と 2 つ目の方法を一緒に使用すると、より良い結果が得られると感じています。 2 番目の方法と 3 番目の方法 個人的には、3 番目の方法に利点があると感じます。

2 番目と 3 番目のメソッドはどちらもセッション内にトークンを書き込みます。このメソッドの利点はストレージ領域を節約できることですが、欠点は、セッションが書き込む前にページ全体をロードする必要があることです。また、ユーザーが送信を複数回クリックした場合でも、セッションがまだ書き込まれていないため、システムはそれが最初の入力であると認識する可能性があります。検証が機能しなくなります。幸いなことに、php 関数は素晴らしい機能を提供します。 session_write_close() を使用すると、ページのロードを待たずにすぐにセッションを書き込むことができます。同僚には、redis、memcache、データベースなど、セッションを保存するための多くのオプションもあります。




http://www.bkjia.com/PHPjc/825207.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/825207.html

技術記事

1. 送信ボタンは無効に設定されます。ユーザーが送信すると、ボタンはすぐに無効な状態に設定されます。これはjsを使って実装されています。 送信する前にコードをコピーしてください。コードは次のとおりです: $("#submit").attr('disabled','t...

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート