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