5月
26
2012

Cookieを使って重複投票を防ぐ方法(PHP)

投票サイトを作るときに、1人で何回も重複投票ができないようにする方法は、
・IPアドレスを使用する方法
・ログイン認証する方法
・クッキーを利用する方法
などがありますが、
ここでは、クッキーを利用する方法について、そのメリット、デメリット、実装方法を紹介します。

メリット

・ログイン認証を使用する場合と比較して、
 投票する側の手間が少なくて済み、気軽に投票ができるため投票率が高くなる。
・IPアドレスを使用する場合と比較して、
 NATやプロキシサーバを利用している場合でも、重複投票と認識されることがない。

デメリット

・クッキーを削除した場合、何度でも投票することが可能
・古い携帯電話の場合、クッキーを利用できないことがある
 (その場合、何度でも投票可能とするか、投票できなくするかは設定次第)

実装方法

投票をする「投票画面」と、投票後に表示する「投票完了画面」の2画面を使って説明していきます。

実装する要件

・Cookieが削除された場合の重複投票は許容
・Cookieが利用できない端末は、投票不可
・投票は1人1日1回までとし、日付が変われば再度投票が可能

Cookieが利用可能かどうかを調べる

クッキーが利用できる端末かどうかを調べるため、
まずは、投票画面を表示する際に、あらかじめCookieをセットします。

setcookie("use_cookie",'true',time()+60*60*24*1);

※投票画面を表示するプログラムへ記述します。
※Cookieの有効期限を1日にセットしています。

そして、投票ボタンを押したときに動くプログラムで、
セットされたCookieの値が送信されているかどうかをチェックし、
端末でCookieが利用かどうかを判別します。

// Cookieが有効でない場合
if(!isset($_COOKIE['use_cookie'])){
	$message = '投票は、Cookieを有効にする必要があります。';
}

投票済みであることをCookieにセット

1日1回投票済みであることを確認するために、
投票したときに、日付をキーにしたCookieをセットします。

$date = date('Ymd');
setcookie($date,'true',time()+60*60*24*1);

また、日付のcookieがセットされている場合は、
投票済みであることを表示するメッセージを表示させます。

// 投票済みの場合
if(isset($_COOKIE[$date])){
	$message = '投票済みです。';
}

コメントする

メールアドレスは公開されません。

このエントリーをはてなブックマークに追加