スキップしてメイン コンテンツに移動

投稿

2月, 2013の投稿を表示しています

PHPで2重ポスト対策 その2 同一ページ内で処理

流れのサンプルなので、XSSとかSQLインジェクションとか考慮してません。 なので、使うときは考慮してね。 <?php $act = isset($_POST['act']) ? $_POST['act'] : 'init'; $data = isset($_POST['data']) ? $_POST['data'] : ''; $ticket = ''; session_start(); // 初期化処理 if ($act == 'init') { $act = 'check'; } // チェック処理 else if (($act == 'check') || ($act == 'regist')) { if (チェック処理正常) { $act = 'regist'; $ticket = time(); $_SESSION['ticket'] = $ticket; } // 登録処理 else { // 2重ポスト時 if (empty($_SESSION['ticket'])) { // 2重ポストされたときの処理 } // 不正なポスト時 else if ($ticket != $_SESSION['ticket']) { // 不正な処理 } // 正常なポスト時 else { // 先にチケットを空にする unset($_SESSION['ticket']); // 登録処理 if (登録処理正常) { header("Location: 登録完...

リクエストはキャンセルできない

基本的なことを知らなかった。 <?php $fp = fopen('/var/tmp/hoge.txt', 'wb'); for ($i = 0; $i < 1000; $i++) { // カウンタをファイルへ出力 fwrite($fp, "{$i}\n"); // 1秒待機 sleep(1); } 千秒カウントし、カウンタをファイルに出力するPGを作ってみた。 このPGへブラウザからアクセスして、途中で [ Esc ] キーでキャンセルした。 つもりだった。 で、サーバー上のファイルを less コマンドで開いて [Shift] + G で何気に表示を更新していたら、ファイルにカウンタが出力され続けていた。 ・・・一度受け付けたリクエストは、サーバー上で処理が終わるか、サービスが再起動されるまで処理され続けることがわかった。 知らなかったおれ、恥ずかしい・・・