Probleme beim setzen und auslesen von Cookies

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme beim setzen und auslesen von Cookies

    Hallo zusammen

    Ich bin, nach langer PHP-Abstinenz, mal wieder ein bisschen eingestiegen. Und schon stosse ich an einem Problem an...

    Ich möchte ein Cookie setzen und, wenn der User zurückkehrt, dieses erkennen und auslesen. Konkret möchte ich, wenn ein User von einer referenzierten Seite anschliessend Kontakt aufnimmt, auf diese Information zugreifen können, auch wenn die Kontaktaufnahme mehrere Tage später und dann mittels Direkteinstieg erfolgt. (das es da eine Grauzone gibt (Cookie-Löscher) ist mir bewusst)

    Folgenden Code verwende ich:
    PHP-Code:
    if($_SERVER['HTTP_REFERER']) {
        
    $name $_SERVER['HTTP_HOST'];
        
    $value $_SERVER['HTTP_REFERER'];
        
    $expire time()+(60*60);
        
    $path $name;
        
    setcookie($name$valuetime()+3600$path);

    Die Idee: Wenn jemand von einer Seite referenziert wird, soll er erkannt und entsprechend das Cookie gesetzt werden.

    Das scheint soweit auch zu klappen, aber des Expire-Date liegt nicht eine Stunde in der Zunkunft sondern volle 2 Jahre. Ich kann mir nicht erklären weshalb.

    Dann wollte ich, um zu prüfen, obs klappt, den Inhalt des Cookies, oder einen Teil davon, mit folgendem Codeschnipsel ausgeben lassen:
    PHP-Code:
    if($_COOKIE['name']) {
        echo 
    "Wert im Cookie 'name' : ".$_COOKIE['name']."<br />\n";

    Obwohl ich das Cookie auf meinem PC sehe, wird aber nichts ausgegeben. Auch nach mehreren Klicks auf der Seite nicht.

    Was hab ich hier falsch verstanden?

    Für eure Hilfe bedanke ich mich.

    Gruss
    Philipp

  • #2
    Das scheint soweit auch zu klappen, aber des Expire-Date liegt nicht eine Stunde in der Zunkunft sondern volle 2 Jahre. Ich kann mir nicht erklären weshalb.
    Testausgaben?

    Du definierst $expire, verwendest es aber nicht.
    Wozu gibst du den Pfad an, der könnte der Übeltäter sein.

    Kommentar


    • #3
      hallo

      Danke für dein Feedback. die $expire habe ich testhalber mal nicht verwendet. Habs jetzt wieder zurück gesetzt. Aber trotzdem wird das Expire-Date, zumindest laut dem Explorer, ins Jahr 2010 datiert.

      Und trotzdem kann ich auf das Cookie nicht zugreifen. Ich kann keine Parameter mittels $_COOKIE['.....´] auslesen.

      Nach allen Dokus, welche ich gefunden/gelesen habe, sollte man z.B. auf den Namen des Cookies mittels $_COOKIE['name´] zugreifen können. Wenigstens hab ichs so verstanden... Ich habs auch schon mit dem Namen versucht, welchen ich dem Cookie zugewiesen habe; erfolglos.

      Ich verstehe nicht, wo mein Denkfehler liegt...


      Gruss
      Philipp

      Nachtrag:
      Das Cookie soll beim ersten Aufruf der Seite gesetzt werden. Ich versuche dies zu bewerkstelligen, indem ich eine Session-Variable setze über die ich das abfragen kann:
      PHP-Code:
      if($_SESSION['cookie_is_set'] != 1) {
          if(
      $_SERVER['HTTP_REFERER']) {
              
      $name $_SERVER['HTTP_HOST'];
              
      $value $_SERVER['HTTP_REFERER'];
              
      $expire time()+(60*60);
              
      $path $name;
              
      setcookie($name$value$expire$path);
              
      $_SESSION['cookie_is_set'] = 1;
          }

      Aber trotzdem wird das Cookie bei jedem Klick auf der Seite erneuert.
      Zuletzt geändert von philippCH; 30.06.2008, 23:18.

      Kommentar


      • #4
        Lösche mal alle deine Cookies, auch die Sessioncookies. Dann lade die Seite und schau dir die Header und schau was für Cookies gesetzt worden sind. (Für Firefox gibt es dazu zwei hilfreiche Extensions Live HTTP Headers und Web Developer.)
        Wenn bis dahin alles okay ist, ruf die Seite noch ein zweites Mal auf und schau dir die Request- und Response-Header an.

        Kommentar


        • #5
          was ist eigentlich mit session_start(); ?
          Ist das bei den neuen Versionen auch nicht mehr nötig oder wie?

          Mach lieber alles sauber mit session_start(); und dann mit session_register("xyz"); !

          Grundsätzlich empfielt es sich eher nur mit sessions zu arbeiten und dann höchstens die session als Cookie abspeichern zu lassen.

          Optimaler dazu wäre natürlich, dass du die Session-id als GET übergibst (Achtung IP überprüfen, da ein Link schnell über ICQ weitergegeben werden kann)

          Am Optimalsten dazu wäre, wenn du die Session als "theoretisches" Verzeichnis übergibst und mit FileMatch arbeitest (z.B http://www.xyz.de/home/file.php/_/c9...1f334f9b55bf90), da dann Google auch alle Seiten indiziert

          Aber das sind Kleinigkeiten!

          Sieh lieber zu, dass du das mit den simplen Cookies in den Griff bekommst
          Find Parties?
          Partysuche

          Kommentar


          • #6
            $path = $name; <<-- falsch
            $path = '/'; besser

            was ist eigentlich mit session_start(); ?
            Ist das bei den neuen Versionen auch nicht mehr nötig oder wie?
            Sicherlich ist das nötig!!

            und dann mit session_register("xyz");
            Blödsinn, weil total veraltet und tuts nur mit register_globals = on


            Und nein!
            Man sollte zwingend dafür Sorge tragen, dass Google keine SID zu sehen bekommt.
            Weil:
            1. sonst hast du plötzlich tausende von Leuten mit der selben SID auf deiner Seite
            2. Google verweigert die Zusammenarbeit, wenn es den selben Content mehrfach auf einer Website vorfindet. Und das ist so! Wegen der wechselnden SID
            Zuletzt geändert von combie; 02.07.2008, 11:07.
            Wir werden alle sterben

            Kommentar


            • #7
              Danke erstmal für eure Hinweise.

              Am Montag war leider das Forum nicht mehr erreichbar, weshalb ich erst heute wieder reagieren.

              Also zum ersten: Ich konnte das Problem lösen. Der Grund war, dass ich als Cookie-Name die URL der Seite herangenommen habe. Das hat, warum auch immer, so nicht geklappt. Nachdem ich einen "Fantasie"-Namen genommen habe, gehts jetzt.

              was ist eigentlich mit session_start(); ?
              Das ist natürlich gesetzt. Aber ich wollte nicht gleich 200 Zeilen Code publuizieren.

              session_register("xyz");
              mach ich nicht.

              sonst hast du plötzlich tausende von Leuten mit der selben SID auf deiner Seite
              Was ist eine SID? Verstehe jetzt den Zusammenhang dieses Statements mit meinem Problem nicht so ganz...


              Gruss
              Philipp

              Kommentar


              • #8
                Was ist eine SID?
                SessionID

                Kommentar


                • #9
                  Danke für die Aufklärung.

                  Funktioniert jetzt alles einwandfrei.


                  Gruss
                  Philipp

                  Kommentar

                  Lädt...
                  X