[PHP]連続投稿を一定時間制限する(クッキーによる簡易ロック)

Facebook にシェア
Delicious にシェア
LINEで送る
Pocket

掲示板等で連続書き込みを簡易的に防止する場合はクッキーを使うのが簡単です。
引数は基本的に「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:




  • This entry was posted in PHP and tagged , . Bookmark the permalink.

    コメントを残す

    メールアドレスが公開されることはありません。