特定の Web サイトで、未登録ユーザーまたは単にゲストが何か (レビュー、ビデオ、画像など) に投票できるようにするために使用される一般的なメカニズムを理解しようとしています。彼らはそれをどのように追跡していますか?このようなサイトと同様に、同じゲストが同じ端末から 2 回投票することはできません。彼らはIPアドレスを保存していますか? または、コンピュータ ID/名前を保存しますか?
どんなアイデアでも大歓迎です。
PS: (mywot.com) はそのようなサイトの例です。
特定の Web サイトで、未登録ユーザーまたは単にゲストが何か (レビュー、ビデオ、画像など) に投票できるようにするために使用される一般的なメカニズムを理解しようとしています。彼らはそれをどのように追跡していますか?このようなサイトと同様に、同じゲストが同じ端末から 2 回投票することはできません。彼らはIPアドレスを保存していますか? または、コンピュータ ID/名前を保存しますか?
どんなアイデアでも大歓迎です。
PS: (mywot.com) はそのようなサイトの例です。
クッキーまたはセッションを使用して、既に投票したコンピューターを識別します。Javascript または PHP を少し理解していれば、いくつかの例を示すことができます。
編集:OK、ここに例があります:
<button value="VOTE" onClick="vote();">
<script>
var votes = 9654; //Some vote counter - only for test purposes - practically, this wouldn't work, the votes would have to be stored somewhere, this number is only stored in the browser and won't actually change for everyone, who sees the page!
function vote()
{
var cookies = document.cookie.split(";"); //Make an array from the string
var alreadyVoted = false;
for (var i = 0; i < cookies.length; i++) //Iterate through the array
{
temp = cookies[i].split("=");
if (temp[0] == "voted" && temp[1] == "true") //The cookie is there and it is "true", he voted already
alreadyVoted = true;
}
if (alreadyVoted)
{
alert("You can't vote twice, sorry.");
}
else
{
var date = new Date();
date.setTime(date.getTime()+(5*24*60*60*1000)); //Cookie will last for five days (*hours*mins*secs*milisecs)
var strDate = date.toGMTString(); //Convert to cookie-valid string
document.cookie = 'voted=true; expires=' + strDate + '; path=/'; //Creating the cookie
votes++; //Here would be probably some ajax function to increase the votes number
alert("Thanks for voting!\nVotes: "+votes);
}
}
</script>
これが役立つことを願っていますが、これは非常に単純な Cookie デモストレーション コードにすぎず、実際には投票には機能しません! 投票値を実際に保存するには、PHPなどを使用する必要があります...
通常の手法は、Cookie を使用することです。最近は多くの場所で NAT が使用されているため (オフィス、ネットカフェ、DSL ルーターを備えたほとんどの家庭)、IP アドレスだけでは十分ではありません。
Cookie はバックエンドで処理するのが理想的ですが、ブラウザの JavaScript で処理することもできます。
クッキーは確かに解決策です。動作するシステムは次のとおりです。
各訪問者 ID の投票を記憶する投票テーブルをデータベースに用意します。訪問者がサイトにアクセスしたときに、リクエストに visitor_id Cookie が含まれているかどうかを確認します。そうでない場合は、固有の visitor_id を (uuid ジェネレーターを使用して) 生成し、生成された id を値として、応答に visitor_id cookie を入れます。この Cookie は永続化する必要があります。
投票がトリガーされるたびに (および/または投票リンクを生成するたびに)、現在の訪問者 (visitor_id Cookie で識別される) が既に投票しているかどうかを、votes テーブルのおかげで確認します。投票が完了したら、投票テーブルに保存します。
もちろん、訪問者が Cookie を消去したり、別のブラウザやマシンを使用して何度も投票したりするのを止めるものは何もありません。ただし、認証がなければ、それが最善の方法です。