Rankin: p3p - aber wie?!

Hi!

Ich mache gerade mit PHP was, wo ich Cookies verwende...
Mein Opera nimmt die Cookies an, aber FireFox und IE nicht. Nachdem ich dann herrausgefunden habe, dass daran p3p "schuld" ist, habe ich sogleich nach Beispielen gesucht. Dummerweise sind die alle nicht so toll :/
Hat hier jemand ein gutes und einfaches Beispiel wie ich den Browser dazu bringe ein einfaches Cookie, in dem nur der Wert eines Textfeldes gespeichert wird, anzunehmen?!

MfG

Rankin

  1. Halihallo Rankin

    Hat hier jemand ein gutes und einfaches Beispiel wie ich den Browser dazu bringe ein einfaches Cookie, in dem nur der Wert eines Textfeldes gespeichert wird, anzunehmen?!

    header('P3P: CP="NOI DEVa TAIa OUR BUS UNI"');  /* [1] */
    header('Set-Cookie: name=value; path=/; ...');

    [1] bei CP setzt du einfach die Eigenschaften ein, die der Verwendung
    deines Cookies "gerecht" werden und mit der Policy übereinstimmen;
    spricht die compact policy.

    Lies aber in jedem Fall http://www.w3.org/P3P/, sodass du die
    ganze P3P-Spezifikation erfüllst.

    Viele Grüsse

    Philipp

    1. Ich schreibe jetzt das hier:

      $time = time()+30; // also für 30 sekunden
      header('P3P: CP="NOI DEVa TAIa OUR BUS UNI"');
      header('Set-Cookie: name="testcookie"; value="test"; expire=$time; path="/"; domain=".localhost"');

      und will das Cookie mit echo $_COOKIE["testcookie"]; ausgeben.

      Aber das geht nicht, was mache ich falsch?

      1. Halihallo Rankin

        $time = time()+30; // also für 30 sekunden
        header('P3P: CP="NOI DEVa TAIa OUR BUS UNI"');
        header('Set-Cookie: name="testcookie"; value="test"; expire=$time; path="/"; domain=".localhost"');

        Eine Unix-Timestamp ist keine gültige Cookie-Expires time.

        und will das Cookie mit echo $_COOKIE["testcookie"]; ausgeben.

        Wieso, du hast den Cookie ja bereits ausgegeben.

        Aber das geht nicht, was mache ich falsch?

        Was geht nicht? - Was gibt dein Programm aus. Teste es mal auf der
        Konsole und schreib den Header hier ins Forum.

        Viele Grüsse

        Philipp

        1. Hi!

          Eine Unix-Timestamp ist keine gültige Cookie-Expires time.

          In welcher Form muss die Expire-Zeit angegeben werden? Mit dem "alten" setcookie(); hats damit funktioniert.

          Wieso, du hast den Cookie ja bereits ausgegeben.

          Ich denke ich hab ihn erst gesetzt? Wo wir gerade dabei sind, wie gebe ich den Wert denn dann aus?

          MfG

          Rankin

          1. Halihallo Rankin

            In welcher Form muss die Expire-Zeit angegeben werden? Mit dem "alten" setcookie(); hats damit funktioniert.

            Lass dir doch die Ausgabe eines mit setcookie arbeitenden Scriptes
            auf der Konsole ausgeben, dann siehst du es:

            Set-Cookie: name=value; path=/; expires=Sun, 28-Mar-2004 16:30:50 GMT

            Wieso, du hast den Cookie ja bereits ausgegeben.

            Ich denke ich hab ihn erst gesetzt?

            Nein, mit header _gibt_ man bereits einen header aus und setzt somit
            den Cookie (sprich: er ist dann bereits zum Client ausgegeben).

            Wo wir gerade dabei sind, wie gebe ich den Wert denn dann aus?

            header('Set-Cookie: ...') gibt den Cookie aus...
            setcookie(...) gibt den Cookie aus...
            $_COOKIE[] gibt den Cookie aus, vor dem ersten Zeichen des
            eigentlichen Contents, sprich: Kurz bevor das erste Zeichen
            ausgegeben wird, wird für jeden Eintrag in $_COOKIE "setcookie"
            aufgerufen. Falls du jedoch P3P Direktiven mitsenden willst, musst du
            eben alles "manuell" über header machen.

            Viele Grüsse

            Philipp

            1. Hi!

              Das Problem ist, ich will eigentlich keine p3p Header mitgeben, nur irgendwie akzeptiert der IE das Cookie nicht wenn ich einfach

              setcookie ("testcookie", "test", $zeit, "/", ".localhost", 0);

              zum Erstellen des Cookies und

              echo $_COOKIE["testcookie"];

              zum Ausgeben des Wertes ("test") mache. Opera frisst das so und ich meine früher auch IE.
              Liegt das etwa nicht an dem Nichtbenutzen von p3p? Wenn nein, wieso gehts nicht?

              1. Halihallo Rankin

                Das Problem ist, ich will eigentlich keine p3p Header mitgeben, nur irgendwie akzeptiert der IE das Cookie nicht wenn ich einfach

                Warum sagst du das nicht gleich?

                setcookie ("testcookie", "test", $zeit, "/", ".localhost", 0);
                zum Erstellen des Cookies und
                echo $_COOKIE["testcookie"];

                Wie oft denn noch? - $_COOKIE[] enthält alle empfangenen Cookies,
                senden tust du sie über setcookie. Wie Stefan schon sagt: Ausgeben
                kannst du den Cookie erst beim nächsten Scriptaufruf, denn erst dann
                wird er vom Client gesendet und ist in $_COOKIE[] "sichtbar".
                Übrigens: Meine letzte Aussage, dass für jeden $_COOKIE-Eintrag ein
                setcookie aufgerufen wird, stimmt nicht. Über $_COOKIE[] liest man
                die Cookies nur ein.

                zum Ausgeben des Wertes ("test") mache. Opera frisst das so und ich meine früher auch IE.

                Das kann mehrere Ursachen haben und diese haben nicht umbedingt mit
                P3P zu tun.

                - falls das Script läuft nicht auf dem Host ".localhost" läuft, wird
                   der Cookie nicht gespeichert, da die Domainangabe zwingend mit dem
                   Aufrufenden Host übereinstimmen muss (bzw. Teile davon).
                   Lass diese Angabe versuchsweise weg.
                 - Setz die Expires-Angabe mal auf einen Tag, dass du wirklich damit
                   testen kannst und nicht deiner eigenen Expires Angabe zum Opfer
                   wirst.
                 - Hast du Cookie im IE _wirklich_ aktiviert?
                 - Lass das Script auf der Console ausgeben: Werden tatsächlich
                   Set-Cookie headers versendet?
                 - Falls dein Script eine Third-Party-Anwendung ist, sprich von einer
                   ganz anderen Website (Hostname anders) eingebunden wird. Dann
                   könnte es an P3P liegen, ja.

                Liegt das etwa nicht an dem Nichtbenutzen von p3p? Wenn nein, wieso gehts nicht?

                s. oben. Und sag das nächste mal nicht, dass du den Fehler auf P3P
                zurückführen konntest, wenn du dir dessen nicht sicher bist; du
                beschreibst nur die Symptome und _wir_ folgern.

                Viele Grüsse

                Philipp

      2. Hallo,

        und will das Cookie mit echo $_COOKIE["testcookie"]; ausgeben.

        Aber das geht nicht, was mache ich falsch?

        Ich nehme mal an, dass du mit ausgeben das Auslesen des gesetzten Cookies meinst. Hast du auch daran gedacht, dass das Setzen und Auslesen in zwei getrennten Requests passieren müssen?

        Viele Grüße,

        Stefan