Подтвердить что ты не робот

Разработка пикселя отслеживания

Я пытаюсь создать пиксель, который будет отслеживать текущий URL-адрес пользователя, когда он посещает. Я могу использовать либо JS (предпочтительный), либо пиксель изображения 1x1. С JS я предполагаю, что мне нужно будет запустить запрос AJAX на PHP script, чтобы захватить нужную мне информацию и с пикселем изображения. У меня возникают проблемы с получением URL-адреса в настоящее время.

Я также подумал о кодировании URL-адреса текущего URL-адреса с помощью JS и динамическом размещении пикселя изображения с закодированным текущим URL-адресом в виде строки запроса на PHP script, но я могу быть очень длинным.

Если я должен идти по маршруту AJAX, какую библиотеку AJAX я могу использовать? Для этой цели JQuery слишком раздута.

Любые другие идеи?

4b9b3361

Ответ 1

Вы можете написать script, который создает и возвращает образ .gif, .jpeg или .png, используя PHP для отслеживания, используя библиотеку GD (который часто распространяется с PHP в современных версиях). Если у вас нет доступа к GD, вы всегда можете перекомпилировать PHP с включенным GD.

Пример:

pixel.php (прокомментировано с целью пояснения):

<?php

  // Create an image, 1x1 pixel in size
  $im=imagecreate(1,1);

  // Set the background colour
  $white=imagecolorallocate($im,255,255,255);

  // Allocate the background colour
  imagesetpixel($im,1,1,$white);

  // Set the image type
  header("content-type:image/jpg");

  // Create a JPEG file from the image
  imagejpeg($im);

  // Free memory associated with the image
  imagedestroy($im);

?>

В простом примере вы можете вызвать это отслеживание, используя следующий пример URL-адреса на электронной почте или на другой странице:

<img src="http://example.com/pixel.php?s=value1&b=value2&c=value3">



Использование переменных:

В рамках pixel.php вы можете проанализировать и интерпретировать любые переменные $_GET, которые передаются ему внутри тега изображения, упрощенно:

if (isset($_GET['a'])) {
  // (Do|log) act on a
}
if (isset($_GET['b'])) {
  // (Do|log) act on b
}
if (isset($_GET['c'])) {
  // (Do|log) act on c
}

Применить и повторить по мере необходимости, но вы можете быть достаточно сложными в своих действиях и тем более, что у вас есть доступ к довольно большой информации о пользователе, если вы можете установить vars в строку $_GET.

Более подходящим примером может быть:

<img src="http://example.com/pixel.php?userid=98798&campaign=302&last=8">



Отслеживание более чем $_GET переменных:

Вы также можете получить гораздо больше информации с помощью PHP, например:

// Server variables
$ip = $_SERVER['REMOTE_ADDR'];
$referer = $_SERVER['HTTP_REFERER'];
$useragent = $_SERVER['HTTP_USER_AGENT'];
$browser = get_browser(null, true);
etc...

а затем, возможно, вставьте в таблицу отслеживания в свою базу данных:

$sql = "INSERT INTO campaign_tracking 
        ('when','campaign','last','ip','useragent') 
        VALUES 
        (NOW(),'$campaign','$last','$ip','$useragent')";

Это базовый метод, используемый широко для отслеживания маркетинговых кампаний по электронной почте и, в частности, в PHP, но тот же метод применим с использованием других языков и библиотек сценариев/программирования, а также для других целей.

Дополнительная и полезная информация о GD:

Ответ 2

Вот еще одна реализация PHP пикселя отслеживания, из проекта Open Web Analytics, который пытается в основном быть клоном PHP в Google Analytics,

Он возвращает прозрачное GIF-изображение 1x1 (без использования библиотеки изображений PHP!), с заголовком без кэша (важно для точного отслеживания) и сбрасывает вывод, чтобы продолжить обработку аналитики без блокировки ответа HTTP ( представление). Это похоже на довольно продвинутую реализацию, стоит попробовать.

<?php
ignore_user_abort(true);

// turn off gzip compression
if ( function_exists( 'apache_setenv' ) ) {
  apache_setenv( 'no-gzip', 1 );
}

ini_set('zlib.output_compression', 0);

// turn on output buffering if necessary
if (ob_get_level() == 0) {
  ob_start();
}

// removing any content encoding like gzip etc.
header('Content-encoding: none', true);

//check to ses if request is a POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // the GIF should not be POSTed to, so do nothing...
  echo ' ';
} else {
  // return 1x1 pixel transparent gif
  header("Content-type: image/gif");
  // needed to avoid cache time on browser side
  header("Content-Length: 42");
  header("Cache-Control: private, no-cache, no-cache=Set-Cookie, proxy-revalidate");
  header("Expires: Wed, 11 Jan 2000 12:59:00 GMT");
  header("Last-Modified: Wed, 11 Jan 2006 12:59:00 GMT");
  header("Pragma: no-cache");

  echo sprintf('%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%',71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59);    
}

// flush all output buffers. No reason to make the user wait for OWA.
ob_flush();
flush();
ob_end_flush();

// DO ANALYTICS TRACKING HERE

Ответ 3

Выход 1px x 1px следующим образом:

header('Content-type: image/png');
echo gzinflate(base64_decode('6wzwc+flkuJiYGDg9fRwCQLSjCDMwQQkJ5QH3wNSbCVBfsEMYJC3jH0ikOLxdHEMqZiTnJCQAOSxMDB+E7cIBcl7uvq5rHNKaAIA'));