p3p - aber wie?!
Rankin
- browser
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
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
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?
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
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
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
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?
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
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