[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 メーリングリストの案内