web-dev-qa-db-ja.com

トラッキングピクセルの開発

ユーザーがアクセスしたときに現在のURLを追跡するピクセルを作成しようとしています。 JS(推奨)または1x1の画像ピクセルを使用できます。 JSでは、AJAXリクエストをPHPスクリプトを実行して、必要な情報をキャプチャし、画像ピクセルで現在のURLの取得に問題があります。

また、現在のURLをJSでURLエンコードし、エンコードされた現在のURLを含むイメージピクセルをクエリ文字列としてPHPスクリプトに動的に配置しますが、非常に長くなる可能性があります。

AJAXルート、どのAJAXライブラリを使用できますか?JQueryはこの目的のために肥大化しすぎています。

他のアイデアはありますか?

35
Alex Markov

ここに別のPHP Open Web Analytics プロジェクトからのトラッキングピクセルの実装があります。これは基本的にPHP clone Googleアナリティクスの。

キャッシュなしヘッダー付きの1x1transparentGIF画像(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
49
thaddeusmt

この方法で1px x 1pxを出力します。

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

これは、PHPで記述された非常に単純化されたトラッキングピクセルです。

トラッキングピクセルの仕組み

トラッキングピクセルは、可能な限り最も原始的なビーコンのようなもので、Webページの事実を利用して動作します。画像はページとは別のリクエストです。

すでに他の人のページでJSコードを実行できる場合は、POSTデータをサーバーに戻す必要があります。同じ種類だけを取得する小さなピクセルを表示する必要はありません。データ。

3
John Kawakami

電子メールが表示または開かれたときのマークを実行する関数の呼び出しがピクセルの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=');

}