掲示板等で連続書き込みを簡易的に防止する場合はクッキーを使うのが簡単です。
引数は基本的に「setcookie(クッキー名, 値, 有効期限)」なので、例では有効期限を
現在時刻より300秒(5分)後にセットしてあります。
値はこの場合は何でもいいのでとりあえず「true」としておきました。
1. 書き込み前に投稿フォームのページでクッキーが利用できるかを確認するためのクッキーを発行しておく
<?php
session_start();
// ランダムな文字列を生成
$ticket = md5(uniqid(mt_rand(), true));
// 確認用チケットを発行
setcookie('cookie_ticket', $ticket);
$_SESSION['ticket'] = $ticket;
2. 投稿時にクッキーをチェックし、投稿に成功したら制限をかける
<?php
session_start();
$s_ticket = isset($_SESSION['ticket']) ? $_SESSION['ticket'] : '';
$c_ticket = isset($_COOKIE['cookie_ticket']) ? $_COOKIE['cookie_ticket'] : '';
if( empty($s_ticket) || $s_ticket !== $c_ticket ){
echo "クッキーを有効にして下さい";
} else if(isset($_COOKIE["cookie_post"])){
// 制限された時の処理
echo "連続投稿はしばらく時間をおいて下さい";
} else {
// 投稿処理
// 投稿が完了したら制限用のクッキーを発行する
$expire = time() + 5 * 60;
$value = "true";
// このクッキーが存在する間は投稿を制限
setcookie('cookie_post', $value, $expire);
}
// チケットを削除
$_SESSION['ticket'] = null;
unset($_SESSION['ticket']);
setcookie ("cookie_ticket", "", time() - 3600);
クッキーはブラウザから簡単に削除出来てしまうため、セキュリティ面ではほとんど意味を成しません。
厳格なロックを掛けるのであればアカウントにログインさせる方式を取る必要があります。
とはいえ、IP制限と併用するなどしてちょっとした手間をかけさせることでいたずらを防止する効果はあります。
Similar Posts:
- [PHP]よくあるエラーメッセージの原因と対処法 2
- [PHP]最低限覚えておきたい必須関数一覧
- [PHP]ライフゲームを作る
- [PHP]トランプのブラックジャックを作る
- [PHP]JSON+cURLで時刻同期型ワンタイムパスワードによる認証
- [PHP]エラーの発生箇所を特定する手法
- [PHP]ディレクトリ内の一定時間が経過した古いファイルだけを削除する
- [PHP]PHPプログラミング学習者が陥りやすい10の失敗