KAI asked in 電腦與網際網路程式設計 · 1 decade ago

PHP投票系統如何防使用者重覆投票

PHP投票系統如何防使用者重覆投票\

若1.PHP為投票區如何在1.PHP加入重覆投票的機製

若使用IP法要如何寫呢~把USER IP記到DATABSE判段?\

我需要詳細一點的做法寫法

2 Answers

Rating
  • G
    Lv 5
    1 decade ago
    Favorite Answer

    1. 先讀取真實的 IP (濾掉部份 proxy 的 IP)

    下面是我寫的 Function,你可以參考一下

    function get_real_ip(){

    $ip=false;

    if(!empty($_SERVER["HTTP_CLIENT_IP"])) {

    $ip = $_SERVER["HTTP_CLIENT_IP"];

    }

    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

    $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);

    if ($ip) {

    array_unshift($ips, $ip);

    $ip = FALSE;

    }

    for ($i = 0; $i < count($ips); $i++) {

    if (!eregi ("^(10|172\.16|192\.168)\.", $ips[$i])) {

    $ip = $ips[$i];

    break;

    }

    }

    }

    return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);

    }

    2. 投票時,存到資料庫

    $ip = get_real_ip(); // 取得真實 IP

    if (!empty($ip)) { // 假使 真實 IP 存在,就檢查資料庫是否已有這個 IP

    $sql = "select ip from ip_vote_pool where ip = '$ip'";

    $result = mysql_query($sql) or die(mysql_error());

    $arr = mysql_fetch_array($result);

    if (!$arr) { // 如果沒有這個 IP,就存入資料庫,並允許投票

    $sql = "insert into ip_vote_pool (ip, create_date) values ('$ip', now())";

    mysql_query($sql) or die(mysql_error());

    // 可以投票,投票的動作寫在這裡

    } else {

    // 告訴會員你己投票過

    }

    }

    ================

    你可以寫成像無名的推薦 (利用 ajax)

    但基本上無名或是以上的程式,還是很容易可以作弊,只有不同的 IP 及帳號

    ===============

    如果要完全防堵,建議參考推推王的作法

    http://pushfun.blogspot.com/2008/04/funp.html

    註:不過程式會十分的複雜~

    在 funP 推推王最早的設計中,每一個人的投票都是等值的,只要人數到達門檻就可以昇星星 (星星是推推王推文的等級)。因此,要去亂搞星星很容易,只要多開帳號,要幾篇文章得到星星,都輕而易舉。

    所以從推推王新版開始,系統會自動對一些特定行為類型降低權重,以避免不當的操控。那麼,哪些行為的權重會被降低呢?

    初使用者

    如果使用者的帳號經驗值不足,他的權重就會降低,一旦經驗值到了一定程度,就會和大家有一樣的權重。

    特定內容愛好者

    如果某個使用者推過的文章,種類過於集中,他的權重就會降低,避免部份用戶專門為特定議題與部落格做推薦。

    刻意建立的帳號

    funP 有一個系統機制,如果使用者被認為是來自同一個來源、電腦、並有相同的行為,會被認為是自己刻意建立多個分身帳號。一旦被發現,這些人的權重就會歸零,這文章就算是有 100 個這樣的推,也沒有辦法得到星星。

  • Anonymous
    1 decade ago

    就是辨別是否同一人?答案是沒辦法.用cookie,清除即可.用session,瀏覽器重開即可.用ip,浮動ip無效.

    取得投票者ip查詢資料表,若有資料且在一定時間內,拒絕投票.投票者投票時將ip與時間寫入一個資料表.另外還要一個機制去清理這個資料表的過期ip記錄.

    用ip判斷,遇到只有一個對外ip的區網,即使有30台電腦想投票,也只有頭香能投.

Still have questions? Get your answers by asking now.