Maresa P.: Tracking mit PHP

Hallo liebes Forum,

ich habe ein kleines Statistiktool entwickelt, mit dem ich die Seitenaufrufe meiner Websites zählen möchte.

Ich habe hierzu auf dem www.serverxyz.de ein PHP Script track.php.
Diese Datei track.php wird auf jeder meiner Internetpräsenzen mittels "Trackingpixel" eingebunden:

<img src="http://www.serverxyz.de/track.php?website=seite1" width="1" height="1">

Bei der Einbdindung wird mittels Query-String der Name der Internetpräsenz übermittelt.

In der Datei track.php wird dann mittels PHP in der MySQL Tabelle 'zugriffe':

zugriffe
---------
website [string]
zugriffe_anzahl [int]

der Zahl in zugriffe_anzahl eins hinzu addiert... und zar an der Stelle, wo die zelle website identisch mit dem website aus dem Query-String ist.

So sieht das PHP/MySQL aus:

mysql_query("
UPDATE zugriffe
SET zugriffe_anzahl = zugriffe_anzahl + 1
WHERE website = '".$_GET["website"]."'
;");

Dies funktioniert soweit auch wunderbar. Es gab allerding ein Problem: Bei diesem Script wurden die Impressions der Seite gezählt, auf der das Pixel eingebunden wurde. Ich mächte allerdings die "eindeutigen Besuche" tracken.

D.h.: Wenn ein Besucher auf eine Website kommt, auf der mein Trackingpixel eingebunden ist und anschließend z.B. auf "Reload" im Browser klickt, so wird das Ganze doppelt gewertet (zugriffe_anzahl wird zwei mal erhöht.).

Ich habe mir nun folgendes einfallen lassen:

In track.php wird zuerst eine Session gestartet:

session_start();

Der Bereich, welcher den Zugriff in der MySQL Tabelle zählt wird um eine If-Abfrage erweitert, welche überprüft, ob in der Session ein Schlüssel mit dem Name der Website (also dem übermittelten Query-String 'website') vorhanden ist. Ist dies nicht der Fall, so wird der Besuch gezählt und der Name der Website in der Session initalisert:

if (!isset($_SESSION[$_GET["website"]])) {

mysql_query("
   UPDATE zugriffe
   SET zugriffe_anzahl = zugriffe_anzahl + 1
   WHERE website = '".$_GET["website"]."'
   ;");

$_SESSION[$_GET["website"]] = "ja";
}

Zum Problem:
Auf meinem System (Windows 2000, Internet Explorer 6.0, Firefox 1.1) funktioniert das wunderbar... jeder Besuch wird nur einmal gezählt.
Ich habe allerdings bemerkt, dass das Ganze auf anderen Systemen nicht funktioniert
=> Bei einem Reload wird der Besucher doppelt gewertet.

Ich habe die Vermutung, dass auf diesesn Systemen die Session nicht gestartet bzw. initalisiert wird.

Woran kann das liegen? Habe ich Fehle rin meiner Überlegung mit der Session un der Reloadsperre?

Vielen Dank für Euere Hilfe

Maresa

  1. Hallo,

    <img src="http://www.serverxyz.de/track.php?website=seite1" width="1" height="1">

    Hier fehlt mindestens das alt Attribut.

    Und du solltest überlegen, ob es sinnvoll wäre ein durchsichtiges Bild zurückzuliefern - macht mehr Sinn.

    mysql_query("
    UPDATE zugriffe
    SET zugriffe_anzahl = zugriffe_anzahl + 1
    WHERE website = '".$_GET["website"]."'
    ;");

    Such mal bei google nach SQL Injection.

    Ich habe allerdings bemerkt, dass das Ganze auf anderen Systemen nicht funktioniert
    => Bei einem Reload wird der Besucher doppelt gewertet.

    Sicher, dass der Cookie gesetzt wird?
    Verwendest du eventuell iframes?

    Grüße, Ulli

    1. Hallo,

      Hallo,

      <img src="http://www.serverxyz.de/track.php?website=seite1" width="1" height="1">
      Hier fehlt mindestens das alt Attribut.

      Zur Lösung meines Problems ist das alt Attribut sicherlich nicht relevant.

      Und du solltest überlegen, ob es sinnvoll wäre ein durchsichtiges Bild zurückzuliefern - macht mehr Sinn.

      mysql_query("
      UPDATE zugriffe
      SET zugriffe_anzahl = zugriffe_anzahl + 1
      WHERE website = '".$_GET["website"]."'
      ;");
      Such mal bei google nach SQL Injection.

      Der hier gepostete Code ist eine vereinfachte Version des eigentlich Codes. Hier kommt es auf meine Fragestellung an, nicht auf Verbesserungsvorschläge meines Codes. Im "Originalcode" wird das natürlich berücksichtigt (mysql_escape_string)

      Ich habe allerdings bemerkt, dass das Ganze auf anderen Systemen nicht funktioniert
      => Bei einem Reload wird der Besucher doppelt gewertet.
      Sicher, dass der Cookie gesetzt wird?
      Verwendest du eventuell iframes?

      Nein, iframes finden keine Verwendung.

      Grüße, Ulli

      Gruß
      Maresa

      1. Hallo,

        Zur Lösung meines Problems ist das alt Attribut sicherlich nicht relevant.

        Kann sein.

        Der hier gepostete Code ist eine vereinfachte Version des eigentlich Codes. Hier kommt es auf meine Fragestellung an, nicht auf Verbesserungsvorschläge meines Codes. Im "Originalcode" wird das natürlich berücksichtigt (mysql_escape_string)

        Woher soll ich das wissen?

        Grüße, Ulli

  2. hi,

    Ich habe die Vermutung, dass auf diesesn Systemen die Session nicht gestartet bzw. initalisiert wird.

    Woran kann das liegen?

    gestartet werden kann sie vermutlich, wenn kein genereller fehler in der benutzung des session-mechanismus vorliegt.

    allerdings ist fraglich, ob die session beim nächsten scriptaufruf wiedererkannt werden kann - oder ob einfach eine neue gestartet wird.
    übergabe der SID per GET findet ja nicht statt - in diesem szenario auch schwerlich möglich - also bist du diesbezüglich auf cookie angewiesen.

    da dein bild jetzt aber unterhalb einer anderen domain liegt, als die seite, die das bildscript einbindet, gilt das vom script gesetzte cookie als third party cookie - und die werden bekanntlich gerne geblockt.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      Hallo wahsaga

      Ich habe die Vermutung, dass auf diesesn Systemen die Session nicht gestartet bzw. initalisiert wird.

      Woran kann das liegen?

      gestartet werden kann sie vermutlich, wenn kein genereller fehler in der benutzung des session-mechanismus vorliegt.

      allerdings ist fraglich, ob die session beim nächsten scriptaufruf wiedererkannt werden kann - oder ob einfach eine neue gestartet wird.
      übergabe der SID per GET findet ja nicht statt - in diesem szenario auch schwerlich möglich - also bist du diesbezüglich auf cookie angewiesen.

      da dein bild jetzt aber unterhalb einer anderen domain liegt, als die seite, die das bildscript einbindet, gilt das vom script gesetzte cookie als third party cookie - und die werden bekanntlich gerne geblockt.

      vielen Dank für die transparente Darstellung.
      Reciht es also aus, wenn ich auf Vorhandensein eines Cookies abfrage, bevor der Besuch gezählt wird?

      gruß,
      wahsaga

      Gruß
      Maresa

      1. hi,

        Reciht es also aus, wenn ich auf Vorhandensein eines Cookies abfrage, bevor der Besuch gezählt wird?

        willst du die besucher, die keine cookies zulassen, nicht mitzählen?
        und wo willst du das cookie erstmalig setzen?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. hi,

          Hallo,

          Reciht es also aus, wenn ich auf Vorhandensein eines Cookies abfrage, bevor der Besuch gezählt wird?

          willst du die besucher, die keine cookies zulassen, nicht mitzählen?
          und wo willst du das cookie erstmalig setzen?

          Das Cookie sollte ja automatisch beim Starten/Initalisieren der Session gesetzt werden. Ich frage als ab, ob das Cookiesetzen erfolgreich war. Nur dann zähle ich.

          Ist das so korrekt?
          Fällt Dir was besseres ein?

          gruß,
          wahsaga

          Gruß Maresa

          1. hi,

            Das Cookie sollte ja automatisch beim Starten/Initalisieren der Session gesetzt werden.

            das passiert also, wenn die session nicht wieder aufgenommen werden kann, bei jedem abruf der ressouce.

            Ich frage als ab, ob das Cookiesetzen erfolgreich war.

            ob das setzen eines cookies erfolgreich war, kannst du erst dadurch feststellen, dass es beim nächsten request wieder mitgeschickt wird.

            Nur dann zähle ich.
            Ist das so korrekt?

            es ist eine möglichkeit, sich was in die tasche zu lügen, ja.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hi,

    ich habe ein kleines Statistiktool entwickelt, mit dem ich die Seitenaufrufe meiner Websites zählen möchte.

    warum wertest Du nicht einfach Deine Logfiles aus?

    D.h.: Wenn ein Besucher auf eine Website kommt, auf der mein Trackingpixel eingebunden ist und anschließend z.B. auf "Reload" im Browser klickt, so wird das Ganze doppelt gewertet (zugriffe_anzahl wird zwei mal erhöht.).

    Und wenn ein Besucher später erneut auf Deine Seiten kommt, fordert der Browser das gif meist gar nicht mehr an.

    freundliche Grüße
    Ingo

    1. Hi,

      ich habe ein kleines Statistiktool entwickelt, mit dem ich die Seitenaufrufe meiner Websites zählen möchte.
      warum wertest Du nicht einfach Deine Logfiles aus?

      Da ich ein Statistiktool benötoge, welches

      a) einfach in einen bestehenden Administrationsbereich einzubinden
      und
      b) eine Gruppierung nach logischen Bereichen

      ermöglicht.

      D.h.: Wenn ein Besucher auf eine Website kommt, auf der mein Trackingpixel eingebunden ist und anschließend z.B. auf "Reload" im Browser klickt, so wird das Ganze doppelt gewertet (zugriffe_anzahl wird zwei mal erhöht.).
      Und wenn ein Besucher später erneut auf Deine Seiten kommt, fordert der Browser das gif meist gar nicht mehr an.

      Das ist ein anderes Problem, womit ich allerdings leben kann.

      freundliche Grüße
      Ingo

      Gruß
      Maresa

      1. Hi,

        warum wertest Du nicht einfach Deine Logfiles aus?

        Da ich ein Statistiktool benötoge, welches

        a) einfach in einen bestehenden Administrationsbereich einzubinden

        benötigst Du denn eine stets aktuell online abrufbare Statistik?

        und
        b) eine Gruppierung nach logischen Bereichen

        ermöglicht.

        das sollten einige Tools aber bieten.

        Und wenn ein Besucher später erneut auf Deine Seiten kommt, fordert der Browser das gif meist gar nicht mehr an.

        Das ist ein anderes Problem, womit ich allerdings leben kann.

        wenn Du meinst... auf meinen Seiten wird eine Testgrafik immerhin von 15% aller Besucher nicht neu angefordert.

        freundliche Grüße
        Ingo

        1. Hi,

          warum wertest Du nicht einfach Deine Logfiles aus?

          Da ich ein Statistiktool benötoge, welches

          a) einfach in einen bestehenden Administrationsbereich einzubinden
          benötigst Du denn eine stets aktuell online abrufbare Statistik?

          Ja, die benötige ich.

          und
          b) eine Gruppierung nach logischen Bereichen

          ermöglicht.
          das sollten einige Tools aber bieten.

          Ist mir keins bekannt, welches auf der Auswertung von Logfiles basiert.

          Und wenn ein Besucher später erneut auf Deine Seiten kommt, fordert der Browser das gif meist gar nicht mehr an.

          Das ist ein anderes Problem, womit ich allerdings leben kann.
          wenn Du meinst... auf meinen Seiten wird eine Testgrafik immerhin von 15% aller Besucher nicht neu angefordert.

          Wie umgehen andere Statistiktool (die auch mit einem Trackingpixel arbeiten) das Problem?

          freundliche Grüße
          Ingo

          Gruß
          Maresa

          1. Hi,

            Wie umgehen andere Statistiktool (die auch mit einem Trackingpixel arbeiten) das Problem?

            zumindest für den Firefox hilft es, die Expires-Angabe auf das Datum der Auslieferung zu setzen.

            freundliche Grüße
            Ingo