【问题标题】:Developing a tracking pixel开发跟踪像素
【发布时间】:2012-10-26 01:37:00
【问题描述】:

我正在尝试构建一个像素来跟踪用户访问时所在的当前 URL。我可以使用 JS(首选)或 1x1 图像像素。使用 JS,我假设我需要对 PHP 脚本运行 AJAX 请求以捕获我需要的信息,并且使用图像像素我在获取当前 URL 时遇到问题。

我还考虑过使用 JS 对当前 URL 进行 URL 编码,并将具有编码的当前 URL 的图像像素作为查询字符串动态放置到 PHP 脚本中,但我可能会变得很长。

如果我要走 AJAX 路线,我可以使用哪个 AJAX 库? JQuery 对于这个目的来说太臃肿了。

还有其他想法吗?

【问题讨论】:

  • 您根本不需要 ajax,因为在 PHP 中生成的像素图像只会被包含在 HTML 中并作为图像请求。
  • 只使用服务器日志,或谷歌分析。
  • @Dagon 这是一个自定义构建的应用程序,我需要为其捕获几条信息。
  • @nickhar 你是什么意思?我如何以这种方式将 post 变量传递到这个 PHP 脚本/图像像素中?
  • @AlexMarkov 比如?我不得不对你想要达到的目标做出很多猜测。

标签: php javascript pixel


【解决方案1】:

您可以编写一个脚本,使用 PHP 创建并返回 .gif.jpeg.png 图像,以使用 GD library(在现代版本中通常与 PHP 一起分发)进行跟踪。如果您无权访问 GD,您始终可以在启用 GD 的情况下重新编译 PHP。

示例:

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 的更多有用信息:

【讨论】:

  • 但是我如何访问使用这种类型的实现触发像素的 URL?我能想到的唯一方法是将 document.URL 作为查询字符串参数添加到像素,但我担心它会使像素 URL 太长。没有?
  • 我看不出通过 JS 调用它会给你带来很多问题,除非你的 URL 字符串的长度很荒谬!?您可以毫无问题地拨打长 $_GET,但这是一个主观问题。这取决于你在做什么。 @Baba 虽然您必须即时生成图像,但我从未见过它有任何问题@电子邮件中包含每天大约 100 万(百万)个请求!这就是电子邮件跟踪系统的工作原理。
  • 明白。看来我可能只需要使用 $_SERVER['HTTP_REFERER'] ... 非常感谢您的帮助!
  • 每次都会生成一个新图像。坏坏坏!非常贵。您应该加载现有图像并进行渲染。
  • 如果我正在跟踪 CTA(号召性用语)表单的印象怎么办...如果说我得到 3000,每次页面加载时不会写入 MySQL DB 对服务器的压力太大浏览量/天,并且大多数页面会显示带有跟踪像素的 CTA。我没有使用 GD 库。我正在使用来自riceball.com/tracking-pixel-works 的方法并将结果保存到 MySql(而不是 SQlite3)... PS,也许使用 SQLite3 更好,因为它是一个文件??
【解决方案2】:

这是另一个跟踪像素的 PHP 实现,来自 Open Web Analytics 项目,它试图基本上是 Google Analytics 的 PHP 克隆。

它返回一个 1x1 透明 GIF 图像(不使用 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

【讨论】:

  • 这对我不起作用...输出损坏的图像:(
  • @nights,确保开始
  • @4umfreak 是的,但还是一样。我应该提一下,这只发生在 apache/windows 上
【解决方案3】:

以这种方式输出 1px x 1px:

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

【讨论】:

  • 2019 年在 chrome 上工作 ?
【解决方案4】:

这是一个用 PHP 编写的极其简化的跟踪像素。

How a Tracking Pixel Works

跟踪像素就像是最原始的信标,它通过利用网页的一个事实进行操作:图像是来自页面的单独请求。

如果您已经能够在其他人的页面上运行您的 JS 代码,您只需将数据 POST 回您的服务器。无需显示只会获得相同类型数据的微小像素。

【讨论】:

    【解决方案5】:

    此效果存在类似问题,因为在像素的 alt 中引入了对函数的调用以执行电子邮件被看到或打开的标记,但它不会正确地引发操作。

    <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&amp;id_cart=1002&amp;action=visualize&amp;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=');
    
    }
    

    【讨论】:

      【解决方案6】:

      如果您的项目范围需要,使用OpenPixel 将处理大部分繁重的工作。

      【讨论】:

        猜你喜欢
        • 2011-10-30
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-22
        • 2010-11-03
        • 1970-01-01
        相关资源
        最近更新 更多