[PHP-users 19449]Re: 重複投稿/submitを防ぐトランザクショントークンという考え方
Mori Reo
list-program @ rucifer.ddo.jp
2003年 12月 20日 (土) 18:57:16 JST
森です。
Kawazoe Tomonori <tsk @ ibakou.com>さん:
> ソースのこの部分がatomicでないと、多重に処理される可能性はまだあります。
これは気がつきませんでした。
具体的に動作はしたものの、検証する方法が思いつきません。
このスクリプトを普通に実行しただけでは、ロックされている場合の
処理が全く実行されません。ロック処理を検証する良いアイデアは
ありますか?
nextpage.php--------------------------------------------------------
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=EUC-JP">
</head>
<body>
<?php
//送信ボタンを連続して押しやすくする
sleep(1);
if(isset($_SESSION['ttlock'])){
$lock = $_SESSION['ttlock'];
}else{
$_SESSION['ttlock'] = $lock = 'unlock';
}
if($lock === 'unlock'){
$_SESSION['ttlock'] = 'lock';
if($_REQUEST['tt']){
$ttoken =(string) $_REQUEST['tt'];
$sesToken =(string) $_SESSION['tt'];
if($ttoken === $sesToken){
print "正常です";
$_SESSION['tt'] = "unavailable";
$_SESSION['ttlock'] = 'unlock';
}else{
print "多重送信です";
$_SESSION['ttlock'] = 'unlock';
}
}else{
print "トークンがありません";
$_SESSION['lock'] = 'unlock';
}
}else{
print "ロックされています";
}
?>
</body>
</html>
--------------------------------------------------------------------
------------
森 怜峰 <reo @ rucifer.ddo.jp>
PHP-users メーリングリストの案内