[PHP-users 19438]重複投稿/submitを防ぐトランザクショントークンという考え方
Y.Watanabe
yuw @ msj.biglobe.ne.jp
2003年 12月 19日 (金) 21:33:34 JST
渡辺です。
先に言っておきますが自分で考えたアルゴリズムじゃないです。
たまたま手元にころがっていたJava関連の本をぼーっと眺めていたら
目に入ったのでそれのパクリです。(笑)
過不足やおかしな点があればツッコミください。
また、「こんなん得意げに喋らんでもわかってるよ」という方、
ごめんなさい。 ^^;)
# 実はポピュラーなやりかたなんでしょうか?これ。
# 自分にとってはちょっと目ウロコ&コロンブス卵だったのですが。
<重複submitを防ぐトランザクショントークンという考え方>
適用例:
submitボタンを二度押ししてしまったりすることで発生する
掲示板での二重投稿、注文フォームでの二重送信などを防止。
フロー:
(1) フォームを表示するPHPスクリプトにおいて、
「トランザクショントークン」を生成する。
なんでもいい。ランダムな文字列でよい。
(2) フォームを表示するPHPスクリプトにおいて
トークンをセッションに登録し、かつ、フォームの
hidden項目にも同じトークンをセットする
(3) POSTされたデータを受け取るPHPスクリプトにおいて、
次の処理をする
1. hiddenで渡ってきたトークンとセッションに保存されている
トークンが一致すれば真性とみなし、
正常な処理をすると同時にセッション上のトークンを削除する
2. hiddenで渡ってきたトークンとセッションに保存されている
トークンが一致しなければ二重投稿または何らかの不正とみなし、
エラーとする。
# サンプルスクリプト書く役はだれかにタッチ。 ^^;)
PHP-users メーリングリストの案内