リロード対策
Webアプリケーションで、時間のかかる処理や、会員登録のフォームなどで良くあるのは、 submitボタンを複数押してしまい、同じデータが複数登録できてしまうことです。
これを防ぐ案として以下の対策を行ないます。
- フォームごとにIDを振る (もしくは、フォーム作成ごと)
- フォームがサブミットされる度にDBへ送信されたIDを利用して送信された情報のMD5ハッシュを記録
CREATE文
CREATE TABLE submit_lock ( id INT4, -- フォームID digest TEXT, -- 投稿内容のmd5 submit_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- クリーニング用のタイムスタンプ PRIMARY KEY (id, digest) );
PHPでは、
<?php $md5 = get_md5_value_this_form_id($_POST['FID'])); # DB よりmd5の値を取得 if ($md5 == md5(serialize($_POST)) { print('Data sent already. You are not supposed to submit the samedata.'); exit; } set_md5_value_to_database($_POST['FID'], serialize($_POST)); .....
という感じですね。(ソースコードは非常にいいかげん)