назад к разделу "общие вопросы сайтостроения"

Партнерская программа и определение уникальности посетителя

раздел: общие вопросы сайтостроения
последнее изменение: 2014-10-25
автор: Юрий Матвеев

Приступая к задаче, я проанализировал некоторые материалы в интернете на данную тему:

forum.ru-board.com/topic.cgi?forum=31&topic=4606

http://daily.sec.ru/2004/02/02/K-Kasperski-Nakrutka-bannerov---priemi-protivodeystviya.html

Идея достаточно прозрачна, осталось только её реализовать.
Мой сайт пока не отличается высокой нагруженностью, нет и серьезных денежных расчетов по хитам и рефералам. Поэтому приведенное решение - скорее алгоритм, или "скелет" будущей партнерки, которую со временем я оптимизирую и доработаю.
Итак, партнерская ссылка будет формироваться путем добавления к любому адресу Get-хвоста вида:

?ref=123
Будут вестись два вида учета:
  1. Хиты
    Учет будет вестись в таблице типа:
    CREATE TABLE IF NOT EXISTS `hit` (
      `id` int(5) NOT NULL AUTO_INCREMENT,
      `refer` int(5) NOT NULL,
      `ip` varchar(15) NOT NULL,
      `date` date NOT NULL,
      `time` time NOT NULL,
      `unix` int(10) NOT NULL,
      `session_push` char(1) NOT NULL,
      `cookie_push` char(1) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
    


    refer - id реферала, "собственника" хита.
    ip - IP адрес, с которого был хит (в дальнейшем, я буду фильтровать хиты для борьбы с накрутками).
    date, time и unix - метки времени в разных форматах.(информация избыточная, но пока оставлю так для наглядности)
    session_push, cookie_push - односимвольные отметки (Y или N), удалось ли установить посетителю переменную с id реферала в сессию и в куки. (планирую использовать их для борьбы с "ботами").
    Хорошо бы еще добавить некую статистическую переменную для определения вероятности что хит "левый", но четкого алгоритма реализации на этот счет у меня пока нет.
    Общая идея такая:
    При посещении любой публичной страницы подключаем модуль, который анализирует наличие Get-переменной с id реферала в адресе.
    Далее проверяем уникальность хита:

    • отсутствие у него регистрации (логина)
    • отсутствие у него в сессии и куках реферальной переменной
    • отсутствие его IP в базе хитов за определенное время (например - за последнюю неделю
    И если проверка пройдена, "вешаем" посетителю id реферала в сессию и куки и заносим его данные в базу.
    С хитами все. Ниже - код:
    // проверяем наличие $_GET["ref"] из адресной строки
    if (isset($_GET["ref"])) {
    // формируем необходимые переменные (например из массива S_SERVER)
    $hit_date = ;
    $hit_unix = ;
    $hit_time = ;
    $ip_ref = ;
    $get_ref = ;
    
    	// если посетитель не авторизовался, нет реферала в сессии и в куках
    	if (!isset($true_login) 
    	&& (!isset($_SESSION["ref"]))
    	 && (!isset($_COOKIE["ref"]))
    	 ) 
    	 {
    	// запросом к базе данных проверяем его уникальность
    	// в данный момент проверка только на отсутствие IP в базе в течении последнего дня, нужно добавить ещё
    	$hits_base = mysql_query ("SELECT id FROM hit WHERE (ip LIKE '$ip_ref')&(unix > ($hit_unix - 1*24*60*60));");
    	$array_hits_base = mysql_fetch_array($hits_base);
    //	print_r ($array_hits_base);
    	if (empty($array_hits_base)) {
    			// записываем или перезаписываем реферал в сессию и в куки (на неделю)
    			if ($_SESSION["ref"] = $get_ref) {
    //			$messages[]="session - Ok!!"; 
    			$session_push="Y";} else {$session_push="N";}
    			if (setcookie("ref", $get_ref, time()+7*24*60*60)) {
    //			$messages[]="cookie - Ok!!"; 
    			$cookie_push="Y";} else {$cookie_push="N";}
    			// заносим в базу хитов
    $add_hit = mysql_query ("INSERT INTO hit (refer, ip, date, time, unix, session_push, cookie_push) VALUES ('$get_ref', '$ip_ref', '$hit_date', '$hit_time', $hit_unix, '$session_push', '$cookie_push');");
    // сообщение о успешном занесении в базу
    //if ($add_hit == "true") {$messages[]="Add_base = Ok!";} else {$messages[]="Add_base = fale!!!";	}
    		}
    	}
    }
    // информационное отображение о наличии данных о реферале в сессии и куках
    //if (isset($_SESSION["ref"])) {$messages[] = "SESSION ID referal = ".$_SESSION["ref"];}
    //if (isset($_COOKIE["ref"])) {$messages[] = "COOKIE ID referal = ".$_COOKIE["ref"];}
    
  2. При регистрации будем добавлять юзеру поле с id реферала - собственника
    Приоритет сначала будет для id реферала в сессиии, а если там нет, то смотрим в куках:
      // данные о наличии реферальной ссылки в сессии и куках
      // и формируем окончательное значение id реферала - собственника
    if (isset($_SESSION["ref"])) {$own_ref = $_SESSION["ref"]; }
    else {
    if (isset($_COOKIE["ref"])) {$own_ref = $_COOKIE["ref"];} else {$own_ref="1";}
    }
    
Далее $own_ref вместе с другими регистрационными данными пользователя заносится в БД.

Вы можете оставить комментарий или отзыв об этой статье
  • X
    15
    Ваше имя:
    Комментарий:
    loader