Hi,
Ich versuche gerade eine "RememberMe" Funktion mit Cookies einzubauen.
und verzettelst dich dabei im zeitlich-logischen Ablauf der Cookie-Operationen.
wenn man in einer Php Seite (Formular) auf Logout klickt, lösche ich unter anderem
auch das Cookie:
if(isset($_GET['LogOut'])){
setcookie ("rememberMe", "", time() - 3600);
setcookie ("rememberMeToken", "", time() - 3600);
}
In diesem Moment wird noch nichts gelöscht, nur ein HTTP-Header vorgemerkt, der mit der Ausgabe des laufenden Scripts an den Client gesendet wird. Erst beim \_nächsten\_ Request kannst du die Veränderung auch serverseitig sehen.
> Kurz danach kommt dann die Prüfung ob es ein Cookie mit RememberMe gibt, wenn nicht soll der Login Screen kommen:
Und wenn das noch im selben Script, im selben Request passiert, dann ist das Cookie aus dem Request noch da.
> Obwohl das Cookie gelöscht wird (kontrolliert im Firebug), ...
Clientseitig ja: Wenn der Browser die Server-Antwort bekommt, wertet er auch die Header aus und kümmert sich beispielsweise um das Cookie-Gedöns.
> ... zeigt die echo Ausgabe weiter unten immer noch die richtigen Cookie Daten an und auch die Meldung "rememberme token ist ok".
Ja, diese Ausgabe wurde aus dem vorherigen Request erzeugt, als das Cookie noch gesetzt war.
Es gibt mehrere Möglichkeiten, aus dieser Zwickmühle auszubrechen. Eine ist, mit dem setcookie()-Aufruf auch gleichzeitig das Cookie aus $\_COOKIE zu löschen. Eine andere, weniger schöne ist ein Redirect, mit dem man dem Client einmalig ein Neuladen der Ressource nahelegt.
So long,
Martin
--
Ist die Katze gesund,
freut sich der Hund.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(