[PHP-users 19497]Re: 重複投稿/submitを防ぐトランザクショントークンという考え方

Y.Watanabe yuw @ msj.biglobe.ne.jp
2003年 12月 22日 (月) 11:59:14 JST


渡辺です。

で、自分でもサンプルコードつくってみました。
他の方が言ってるような厳密な処理じゃないですが、
こんなのでもたいていのケースで
重複submitを防げるのではないでしょうか。


----- form.php ここから-----
<?php
    mt_srand((double)microtime()*1000000);
    $token = md5((string)mt_rand()); //必要ならユーザー名とか
                                     //メールアドレス等も入れて
                                     //md5化するとGOOD(?)
    session_start();
    $_SESSION["token"] = $token;
?>
<html>
<form method="POST" action="result.php">
<input type=hidden name="token" value=<?php echo $token;?>>
<textarea name="text01" cols=10 rows=3></textarea>
<input type=submit value="GO!">
</form>
</html>
----- form.php ここまで-----

----- result.php ここから-----
<?php
    sleep(1);//重複submitを起こしやすくする。実際にはいらない
    session_start();
    if ( empty($_POST["token"]) || $_POST["token"] != $_SESSION["token"] ) {
        echo "エラーだよん";
    } else {
        unset($_SESSION["token"];
        //ここから先に正常時の処理を続けて書く
        echo "うまくいったよん";
    }
?>
----- result.php ここまで-----




PHP-users メーリングリストの案内