2重送信防ぐ方法でセッションにワンタイムパスワードみたいなの保存しとく方法があけど、
セッション使いたくないなーと思った時は変わりにCookieに保存しとくっていう手もある。
1ページ完結のスクリプトだと特にheader()で飛ばすとエラー出る事もあるので結構便利だと思う。
1、フォームのheddenでトークンIDをセット。IDは表示されるたびに入れ替わる。
print '<input type="hidden" name="ticket" value="'.getTokenId().'" />'."\n";
2、保存とか送信とかが成功した時点でPOSTされたトークンIDをCookieに保存するようにして
$ticket = $_POST["ticket"]; setNewCookie("sample_ticket",$ticket,time()+(3600*24*30));
3、Step2の前のタイミングでPOSTをチェックして、保存されたチケットとPOSTされたチケットが同じなら弾くようにする。
if($_POST[ticket] == $_COOKIE["sample_ticket"]){ print "不正な送信です"; }
▼サンプルソースの関数
//トークン用ID発行 function getTokenId(){ return substr(md5(uniqid().mt_rand()),-13,10); } //クッキー発行 function setNewCookie($name, $value, $time){ return setcookie($name, $value, $time); }
セッションの場合もやり方は同じ。