Mario: Woher kommt mein Besucher

Ich würde gerne wissen wohe rmein Besucher kommt, also auf welche Seite er vorher war. Ist das möglich?

Mario

  1. Hello Mario,

    Ich würde gerne wissen wohe rmein Besucher kommt, also auf welche Seite er vorher war. Ist das möglich?

    Das ist gelegentlich bis oft möglich, festzustellen, aus welcher anderen HTML-Ressource per Link auf Deine verwiesen wurde. Dazu kannst Du die $_SERVER-Variable, und zwar das Element $_SERVER['HTTP_REFERER'] auswerten, wenn sie vorhanden ist.

    http://www.php.net/manual/en/reserved.variables.server.php

    Ob sie vorhanden ist, prüfst Du vorher mit isset() und is_string()
    http://de2.php.net/manual/en/function.isset.php
    http://de2.php.net/manual/en/function.is-string.php

    also, nur wenn sie vorhanden ist UND ein String ist, lohnt es sich, sie auszuwerten.

    Dann muss sie aber keinen gültigen Wert enthalten. Dieser kann durch Browser, Proxies, Firewalls usw. verändert worden sein.

    In mMn aber über 80% der Fälle gibt er Auskunft über die Herkunft der "Empfehlung".

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hi!

      [...] das Element $_SERVER['HTTP_REFERER'] auswerten, wenn sie vorhanden ist.
      Ob sie vorhanden ist, prüfst Du vorher mit isset() und is_string()
      also, nur wenn sie vorhanden ist UND ein String ist, lohnt es sich, sie auszuwerten.

      Wenn da ein Wert vorhanden ist, ist er immer vom Typ String.

      Lo!

      1. Hello,

        [...] das Element $_SERVER['HTTP_REFERER'] auswerten, wenn sie vorhanden ist.
        Ob sie vorhanden ist, prüfst Du vorher mit isset() und is_string()
        also, nur wenn sie vorhanden ist UND ein String ist, lohnt es sich, sie auszuwerten.

        Wenn da ein Wert vorhanden ist, ist er immer vom Typ String.

        Glaub ich nicht.

        Für PHP kann er auch vom Typ Array sein. Das gilt für alle Werte, die PHP von außen bezieht. Die können immer vom Typ String oder vom Typ Array sein, oder nicht vorhanden sein.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hi!

          [...] das Element $_SERVER['HTTP_REFERER'] auswerten, wenn sie vorhanden ist.
          Ob sie vorhanden ist, prüfst Du vorher mit isset() und is_string()
          also, nur wenn sie vorhanden ist UND ein String ist, lohnt es sich, sie auszuwerten.
          Wenn da ein Wert vorhanden ist, ist er immer vom Typ String.
          Glaub ich nicht.

          Zeig mir bitte eine funktionierende Variante, bei der $_SERVER['HTTP_REFERER'] ein Array enthält (natürlich so, dass es über einen Request erzeugt wird, nicht mit PHP-Code). Zur Not reicht die Beschreibung der Vorgehensweise. Das Senden von zwei Referer-Headern mit oder ohne [] führt jedenfalls nicht zu einem Array.

          Für PHP kann er auch vom Typ Array sein. Das gilt für alle Werte, die PHP von außen bezieht. Die können immer vom Typ String oder vom Typ Array sein, oder nicht vorhanden sein.

          Nein. Das mag sicher für $_GET und $_POST in Zusammenhang mit [] gelten. Was macht dich glauben, dass dieses Prinzip auch für $_SERVER gelten soll?

          Lo!

          1. Hello,

            Zeig mir bitte eine funktionierende Variante, bei der $_SERVER['HTTP_REFERER'] ein Array enthält (natürlich so, dass es über einen Request erzeugt wird, nicht mit PHP-Code). Zur Not reicht die Beschreibung der Vorgehensweise. Das Senden von zwei Referer-Headern mit oder ohne [] führt jedenfalls nicht zu einem Array.

            Hast Du es ausprobiert? Dann könnte ich es mir jetzt schenken.

            Wenn Du dich nicht vorher nochmal meldest, versuche ich es aber trotzdem gleich mal, allerdings schon mittels PHP für den Aufbau der Verbindung und der Header. PHP darf Client spielen. Oder ich schaue mal, ob Personas das kann.

            Was macht dich glauben, dass dieses Prinzip auch für $_SERVER gelten soll?

            Ich habe es so in Erinnerung, als wir es mal ausprobiert haben mit einer der letzten 4er oder der ersten 5er Versionen.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hi!

              Zeig mir bitte eine funktionierende Variante, bei der $_SERVER['HTTP_REFERER'] ein Array enthält (natürlich so, dass es über einen Request erzeugt wird, nicht mit PHP-Code). Zur Not reicht die Beschreibung der Vorgehensweise. Das Senden von zwei Referer-Headern mit oder ohne [] führt jedenfalls nicht zu einem Array.
              Hast Du es ausprobiert? Dann könnte ich es mir jetzt schenken.

              Hab ich, mit den beiden erwähnten Varianten. Das Beispiel aus der PHP-Handbuchseite zu fsockopen() diente mir - leicht abgewandelt und ergänzt - als Grundlage.

              Lo!

              1. Hello,

                Zeig mir bitte eine funktionierende Variante, bei der $_SERVER['HTTP_REFERER'] ein Array enthält (natürlich so, dass es über einen Request erzeugt wird, nicht mit PHP-Code). Zur Not reicht die Beschreibung der Vorgehensweise. Das Senden von zwei Referer-Headern mit oder ohne [] führt jedenfalls nicht zu einem Array.
                Hast Du es ausprobiert? Dann könnte ich es mir jetzt schenken.

                Hab ich, mit den beiden erwähnten Varianten. Das Beispiel aus der PHP-Handbuchseite zu fsockopen() diente mir - leicht abgewandelt und ergänzt - als Grundlage.

                Ich habs auch nochmal ausprobiert. Du hast Recht.

                Stimmt, die HTTP-Headers-Namen werden von PHP vor der Auswertung bereinigt. Alle Zeichen, außer [0-9], [a-z] und [A-Z] werden durch _ ersetzt. Somit kommen die Klammern [] nicht durch bis zur Werteumwandlung und es kommt immer ein String oder nichts an.

                In getallheaders() stehen sie noch drin.

                Wenn ich nochmal etwas Zeit dazu habe, möchte ich noch die Stelle im Quellcode finden, an der das passiert und es auch nochmal mit einer alten PHP-Version ausprobieren. Ich bin mir sicher, dass wir schon mal ein "Referer-Array" erzeugt haben.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de