php: setcookie() => cookie erst bei neuem aufruf..

Josh

Legendäres Mitglied
hi alle.

wenn ich in PHP

setcookie("x","y",time()+3600);

aufrufe, ist dann das cookie erst beim nächsten seitenaufruf verfügbar? oder sollte es gleich schon nach aufruf des befehls von php per $_COOKIE verwendet werden können? irgendwie hab ich da nicht ganz den durchblick...
wink.gif


danke
Josh
 
ah, schon begriffen. die $_COOKIE globale variable wird ja zu beginn erstellt und enthält ein neues cookie noch nicht...

dann aber noch was anderes:
wie kann ich nach dem setcookie() überprüfen, ob das cookie tatsächlich gesetzt werden konnte? per isset($_COOKIE["x"]) geht das nun ja nicht bzw. erst nach dem neuladen der seite... :-/
 
Wann empfängt man die Daten vom User? Beim aufruf der Seite? Ich bin mir echt nicht sicher, aber ich meinte das Cookie sendet einen header (d.h geht nicht, wenn vorher Ausgabe statt gefunden hat). Wenn dieser gesendet ist, machst Du was auch immer Du machen möchtest. D.h. Du kannst es ganz am Anfang setzen und dann nacher schon benutzen. Es sei denn, ich irre mich ;-)

Versuch es einfach....?
 
Wenn du ein Cookie auf Seite xy.php setzt, dann kannst du erst auf Seite abc.php prüfen, ob er gesetzt ist.
 
Ich hab mich sehr ungenau ausgedrückt.

Etwas Code zur Veranschaulichung:

CODE if ( cookiewhatever ) {
setcookie("asdf");
header("Location: $PHP_SELF");
}

echo $_COOKIE['asdf'];

 
QUOTE (Josh @ Di 11.1.2005, 13:15)dann aber noch was anderes:
wie kann ich nach dem setcookie() überprüfen, ob das cookie tatsächlich gesetzt werden konnte? per isset($_COOKIE["x"]) geht das nun ja nicht bzw. erst nach dem neuladen der seite... :-/

Hi,

Also wenn ich das richtig verstehe, dann willst du überprüfen, ob das Cookie gesetzt wurde, ohne, dass ein neuer Seitenaufruf stattfindet?
Da ein Cookie im HTTP-Header gesendet wird, kann man es wirklich erst nach einer erneuten Anfrage des Clients auslesen: Also musst du den Rückgabewert der Funktion setcookie() auslesen. Die gibt true zurück, wenn das Cookie erfolgreich gesetzt wurde, oder false, wenn es einen Fehler gab, [ glaub ich wenigstens ;-) ]


greats,


S.B
 
QUOTE (Stefan Bötschi @ Mi 12.1.2005, 7:35) Also musst du den Rückgabewert der Funktion setcookie() auslesen. Die gibt true zurück, wenn das Cookie erfolgreich gesetzt wurde, oder false, wenn es einen Fehler gab, [ glaub ich wenigstens ;-) ]

Das klappt auch nicht.
Aus dem PHP-Manual:


QUOTE Erfolgte bereits vor dem Aufruf dieser Funktion eine Ausgabe erfolgt sein, gibt setcookie() scheitern und FALSE zurückgeben. War setcookie() erfolgreich, wird TRUE zurückgegeben. Dies sagt jedoch nichts darüber aus, ob der Benutzer das Cookie auch akzeptiert hat.
 
danke euch allen für die ratschläge. ich habe das problem nun "gelöst", indem ich es umgangen habe...
rolleyes.gif
scheint tatsächlich keine wirkliche lösung dafür zu geben, und ein gebastel mit verschiedenen forwards etc. will ich nicht haben.
wink.gif


grüsse
josh
 
QUOTE (Josh @ Mi 12.1.2005, 9:12) danke euch allen für die ratschläge. ich habe das problem nun "gelöst", indem ich es umgangen habe...
rolleyes.gif
scheint tatsächlich keine wirkliche lösung dafür zu geben, und ein gebastel mit verschiedenen forwards etc. will ich nicht haben.
wink.gif


Verständlich und vernünftig.

Und wie hast du es jetzt umgangen?
 
es ging um die speicherung von sessions... ich wollte, dass die session in einem cookie gespeichert wird, wenn der user cookies akzeptiert. und falls nicht, sollte die session halt per $_GET übergeben werden... da ich aber wuuuuhuuuhuuunderschöne mod_rewrite links habe, wollte ich diese möglichst nicht mit get params verschandeln... naja, nun ist es halt doch so...
tongue.gif
 
Ich verstehe nicht, was an meiner Lösung nicht funktioniert....? Du lädst die Seite neu indem Du nach dem Cookie Header noch einen 2ten Header nachschickst, wovon der User nichts merkt.
 
@alain, deine version funktioniert schon, hab ich auch nie in zweifel gezogen. doch ich finde es eine holprige lösung, und da versuche ich es lieber auf einem anderen weg... auch wurde mir klar, dass es nonsense ist, 2 verschiedene variante des speicherns einer session ID anzubieten... es braucht nur eine, und ich habe mich für die affensichere version entschieden.
smile.gif
 
QUOTE (Alain Aubert @ Di 11.1.2005, 18:02) Etwas Code zur Veranschaulichung:


CODE if ( cookiewhatever ) {
setcookie("asdf");
header("Location: $PHP_SELF");
}

echo $_COOKIE['asdf'];


Der Location-Header ist falsch. Es muss eine absolute URI angegeben werden. $PHP_SELF enthält nur den lokalen Pfad.

Zwar funktioniert das auch, aber es ist gemäß der Standards allenfalls auf einen Bug (oder eine Toleranz) in den Browsern zurückzuführen. Man sollte es vermeiden, damit wirklich alle Clients damit zurecht kommen.

Die Lösung des Problems ansich kann ich nur befürworten, sehr elegant
wink.gif


Gruß, SloMo
 
Zurück
Oben