0251 / 590 837 15
info@a-coding-project.de

Banner-Tracking: Die Historie der Besucher herausfinden

Wäre es nicht interessant zu wissen, wie oft ein Besucher einen Banner gesehen hat, bis er die Seite wirklich besucht? Ich möchte dir heute ein PHP-Script in die Hand geben, mit welchem du die Historie von Bildaufrufen (in der Praxis vermutlich Bannern) speichern kannst.

Vorweg ist zu sagen, dass es datenschutzmäßig natürlich etwas in der Grauzone ist die Historie zu speichern. Wenn man sie schon speichert, dann sollte es schon anaonym sein.

Banner-Tracking

Banner-Tracking

Über PHP das Bild laden

Vor den eigenen Bannern wird ein PHP-Script gestellt, welches die eigentliche Datei lädt und gleichzeitig PHP-Code ausführt. Öffnet jetzt ein Besucher auf einer Website, auf der unser Banner platziert ist, wird automatisch auch unser PHP-Code ausgeführt – ohne das der Benutzer davon etwas mitbekommt.

Im Quellcode könnte das so aussehen:

<?PHP
  header("Content-Type: image/png");
  readfile("banner.png");
?>

Ruft man hier die PHP-Datei auf, so wird mit readfile der Inhalt von banner.png ausgelesen und zurückgegeben. Mit header wird noch der MIME-Typ angegeben. Dieser wird benötigt damit die PHP-Datei auch als Bild angenommen wird. Da es sich in diesem Fall um ein PNG handelt, ist der MIME-Typ image/png.

Weitere MIME-Typen sind:

image/gif
image/jpeg
image/tiff

Den Besucher wiedererkennen

Zu diesem Zeitpunkt haben wir schonmal ein PHP-Script vor dem Aufruf gestellt. Jetzt können wir mit dem eigentlichten Tracking loslegen. Da wir eine Historie zum Besucher haben möchten, müssen wir diesen erst einmal wiedererkennen.

Hierfür setzen wir einfach einen Cookie, in welchem eine eindeutige Nummer gespeichert wird. Diese Nummer steht ab dann für den Besucher. Wurde sie bereits gesetzt, heißt das der Benutzer hat unseren Banner schon mal gesehen.

Ich benutze für meinen Test einfach einen aktuellen Timestamp. Eine Seite mit hohen Traffic sollte vielleicht noch weitere Details wie die IP oder ähnliches in die Nummer integrieren. Auf die Art der Nummer kommt es nicht an, hauptsache jeder Cookie hat seine eindeutige Nummer.

<?PHP
  if(!isset($_COOKIE['tracking_id']) || !is_numeric($_COOKIE[
     'tracking_id'])){
    setcookie("tracking_id", time(), time()+8640000);
  }
?>

Hier wird erst geprüft, ob der Cookie bereits gespeichert ist und ob er keine Zahl ist. Ist das der Fall, wird im Cookie die eindeutige Nummer gespeichert (time()). Mit time()+8640000 gebe ich an, dass der Cookie 100 Tage gespeichert werden soll. Hier sind natürlich noch weitaus größere Zeiträume möglich.

Benutzerverlauf speichern

Der wichtigste Schritt ist das Speichern der Daten. Dies wird am besten in einer Datenbank erfolgen, da so die spätere Anaylse erleichtert wird. Speichern sollte man auf jeden Fall die eindeutige Nummer, das Datum und vielleicht noch den Referrer.

Damit diese Anleitung nicht zu kompliziert wird, mache ich es mir mal leicht und speichere die Werte in eine Textdatei. Sie heißt einfach wie die eindeutige Nummer mit einem „.txt“. – Jetzt wisst ihr auch warum ich eben geprüft habe, ob der Wert numerisch ist. Kennt ein Angreifer das Verfahren, könnte er sonst den Cookie verändern und einfach irgendwo in meine Dateien schreiben.

<?PHP
  if(isset($_COOKIE['tracking_id'])){
    $file = fopen($_COOKIE['tracking_id'].".txt", 'a');
    fwrite($file, date('d.m.Y H:i:s',time())." ".$_SERVER[
           'HTTP_REFERER']."n");
    fclose($file);
  }
?>

Zunächst prüfe ich zur Sicherheit, ob der Cookie auch wirklich vorhanden ist. Wenn ja öffne ich die txt-Datei und schreibe ans Ende der Datei meine Daten. Ist die Datei nicht vorhanden, wird sie automatisch erstellt.

Fazit

MIt Banner-Tracking kann man eine schöne Übersicht bekommen, wie oft der Besucher einen Banner sieht, bis er wirklich klickt. Außerdem kann man erkennen, wie oft der Banner auf welcher Seite angezeigt wird. Übrigens lässt sich das Verfahren auch zum Schutz vor Bildklaut verwenden. Ist die Url nicht die eigene, könnte man z.B. eine Mail an den Admin schicken.

Eine schöne Erweiterung wäre, wenn man im Browser keine Datei mit .php am Ende, sondern der wirklichen Dateiendung aufruft. Dies könnte man über mod_rewrite abwickeln.

Hier ist nochmal der komplette Code:

<?PHP
    header("Content-Type: image/png");
  readfile("logo.png");
  if(!isset($_COOKIE['tracking_id']) || !is_numeric($_COOKIE[
     'tracking_id'])){
    setcookie("tracking_id", time(), time()+8640000);
  }
  if(isset($_COOKIE['tracking_id'])){
    $file = fopen($_COOKIE['tracking_id'].".txt", 'a');
    fwrite($file, date('d.m.Y H:i:s',time())." ".$_SERVER[
           'HTTP_REFERER']."n");
    fclose($file);
  }
?>

Kommentare

Long Hoang schrieb am 21.04.2011:

Netter Ansatz und durchaus zu gebrauchen! Inwiefern beeinträchtigt das die Performance? Weiß du wie das mit dem Bild einbinden via PHP intern abläuft? Wird da die GD Library mitverwendet? Gruß Long

Stefan Wienströer schrieb am 22.04.2011:

Intern wird einfach der (binäre) Inhalt der Datei eingelesen und an den Client gesendet. Ob es sich dabei um ein Bild handelt ist völlig egal. Könntest theoretisch auch mit Flash o.Ä. machen. GD wird also nicht verwendet.