Разработка пикселя отслеживания
Я пытаюсь создать пиксель, который бы отслеживал текущий URL-адрес пользователя, когда он посещает. Я могу использовать либо JS (предпочтительно), либо пиксель изображения 1x1. С JS я предполагаю, что мне нужно выполнить AJAX-запрос к PHP-скрипту, чтобы получить необходимую мне информацию, и с пикселем изображения у меня возникают проблемы с получением текущего URL.
Я также подумал о URL, кодирующем текущий URL с помощью JS и динамически помещающем пиксель изображения с закодированным текущим URL в качестве строки запроса к сценарию PHP, но я могу получить очень длинный.
Если я собираюсь идти по маршруту AJAX, какую библиотеку AJAX я могу использовать? JQuery слишком раздут для этой цели.
Есть другие идеи?
6 ответов
Вы можете написать скрипт, который создает и возвращает .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?a=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
}
Применяйте и повторяйте по мере необходимости, но вы можете быть достаточно изощренными в том, что вы делаете, и особенно потому, что у вас есть доступ к довольно большому количеству информации о пользователе благодаря возможности устанавливать переменные на $_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:
- GD ссылка - на php.net
Вот еще одна 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
Выведите 1px x 1px следующим образом:
header('Content-type: image/png');
echo gzinflate(base64_decode('6wzwc+flkuJiYGDg9fRwCQLSjCDMwQQkJ5QH3wNSbCVBfsEMYJC3jH0ikOLxdHEMqZiTnJCQAOSxMDB+E7cIBcl7uvq5rHNKaAIA'));
Вот чрезвычайно упрощенный пиксель отслеживания, написанный на PHP.
Как работает отслеживающий пиксель
Пиксель отслеживания похож на самый примитивный маяк из всех возможных, и он работает, используя факт веб-страниц: изображения являются отдельным запросом со страницы.
Если вы уже можете запустить свой JS-код на чужой странице, вам следует просто ПОСТАВИТЬ данные обратно на ваш сервер. Не нужно отображать крошечный пиксель, который будет получать только те же данные.
Использование OpenPixel возьмет на себя большую часть тяжелой работы, если этого требует объем вашего проекта.
Подобная проблема связана с этим эффектом, поскольку вызов функции для выполнения отметки, когда электронное письмо было просмотрено или открыто, было введено в альт пикселя, но оно не вызывает корректное действие.
<img src="https://datafeeds.baruwa.com/1x1spacer.gif" width="1" height="1" alt="Web Bug from https://devorpenguin.des1.net/module/cartabandonmentpro/FrontCartAbandonment?token_cart=87c83b8f77318a54fdd6be91aacc3574&id_cart=1002&action=visualize&wichRemind=1">
public static function visualize()
{
$wichRemind = Tools::getValue('wichRemind');
$id_cart = Tools::getValue('id_cart');
$token = Tools::getValue('token_cart');
if ($token == md5(_COOKIE_KEY_.'recover_cart_'.$id_cart)) {
$query = "UPDATE "._DB_PREFIX_."cartabandonment_remind SET visualize = 1 WHERE wich_remind = ".(int)$wichRemind." AND id_cart = ".(int)$id_cart;
Db::getInstance()->Execute($query);
}
header('Content-Type: image/png');
echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=');
}