4

私は、ユーザーが特定のアイテムに投票できるようにするPHPスクリプトに取り組んでいます。ログインしているかどうかに関係なく、すべてのユーザーが投票できます。次の場合を考えてみましょう。

  1. ユーザーがログインしている場合は、ユーザーのIDを記録できます。また、ユーザーが再度投票しようとすると、同じアイテムへの投票を制限できます。
  2. ユーザーがログインしていない場合は、ユーザーのIPをログに記録し、同じIPからの同じアイテムへの投票を制限できます。

最初のケースの場合、IPをログに記録する必要はありません。さて、2番目のケースは私を狂わせています。ユーザーがIPを変更して、同じアイテムに再度投票する可能性があるのではないかと思っていました。これで、CookieまたはSession varsを使用している場合でも、ユーザーが同じアイテムに再度投票するために新しいセッションを開始している(またはCookieを削除している)場合があります。

私は何かが足りないのですか?そうでない場合、そのような状況をどのように処理しますか?何かご意見は?

4

3 に答える 3

6

私は真剣にキャプチャを使用することを検討します、reCaptchaは良い選択です。

IPアドレスで制限することもできますが、小さな学校や企業など、多くの人が1つのIPアドレスを共有する可能性があります。プロキシは無料で豊富にあるため、バイパスするのも簡単です。また、ロードバランサーがセッション中にIPアドレスを変更することがあるため、エラーが発生しやすくなります。本当に一人当たりの投票数を制限したい場合、最善の策は、ユーザーアカウントにログインして、データベースに投票を保存するようにユーザーに要求することです。

于 2011-01-24T22:33:06.890 に答える
2

まず、PHPを使用してクライアントのIPアドレスを取得する方法がいくつかあります。これが私が知っている3つの方法です:

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (isset($_SERVER['HTTP_CLIENT_IP'])) {
    $ipAddress = $_SERVER['HTTP_CLIENT_IP'];
} else if (isset($_SERVER['REMOTE_ADDR'])) {
    $ipAddress = $_SERVER['REMOTE_ADDR'];
}

次に、Cookieやセッションなどの揮発性ストレージが心配な場合は、これらの値を格納するデータベーステーブルを用意するのが最適な場合があります。これは、client_ip、item_id、date_createdの3つの列を持つ単純なテーブルである可能性があります。これにより、特定のIPアドレスが特定のアイテムへの投票に使用されたかどうかを追跡できます。

さて、これで私が目にする唯一の問題は、クライアントが仕事をしていてプロキシの後ろに座っているかどうかです。ですから、それぞれに長所と短所があるいくつかのオプションがあると思います。

于 2011-01-24T22:39:09.780 に答える
1

あなたはevercookieを使ってみることができます、それはクリアするのがちょっと難しいです

于 2011-01-24T22:57:37.710 に答える