Dreamweaver CS4でPHPを作成するときに読むブログ
Amebaでブログを始めよう!
1 | 2 | 3 | 4 | 5 | 最初次のページへ >>

ワンタイムチケット

リロード対策やCSRF対策


php文

.‥‥‥
$_SESSION['ticket'] = md5(uniqid().mt_rand()); //ランダムなIDを生成する
?>
<form action="complete.php" method="post">
<input type="hidden" name="ticket" value="<?= htmlspecialchars($_SESSION['ticket']), ENT_QUOTES); ?>">
<input type="submit" name="submit_button" value="完了画面へ遷移">
</form>



確認画面でチケットを発行し、セッションに保存しておきます。同時に完了画面へチケットがPOSTされるよう、hiddenにセット。こうして完了画面へ遷移させます。


if (isset($_POST['submit_button'], $_SESSION['ticket'], $_POST['ticket']) && $_SESSION['ticket'] === $_POST['ticket']) {

unset($_SESSION['ticket']);

if (!$form->validation()) {

// 不正な値が入っていた場合は例外処理

header("Location: http://{$_SERVER['HTTP_HOST']}/top.php");
exit;
}
// 1回しか行わない処理

$db->insert($form);

$mail->send();

}
// 登録完了画面出力

$tpl->display();

確認画面で発行されたチケットは一度使い切ってしまえば2度処理される事なくリロード対策となる

$_REQUEST

$_REQUEST

$_GET, $_POST, $_COOKIE, $_FILES の内容を格納した連想配列 。

ようはGETメソッドの場合、$_GETでも$_REQUESTでも情報を取れるし
POSTメソッドの場合、$_POSTでも$_REQUESTでも情報を取れる
ということ。

mysql_insert_id()

mysql_insert_id()

直近の INSERT 操作で生成された ID を得る


会員登録などで情報がINSERTされたときのIDがほしいときに使う

1 | 2 | 3 | 4 | 5 | 最初次のページへ >>