Hi ho!
Habe ein kleines aber doch recht heftiges Problemchen mit meinem selbstgeschriebenem CMS. Und zwar kommt es ständig in Verbindung mit suchmaschinenfreundlichen Links dazu, dass das CMS die hauseigenen Cookies nicht erkennt. Die suchmaschinenfreundlichen Links sehen wie folgt aus:
http://localhost/cms/index.php/site/account/op/messages
Nun läuft das folgendermaßen mit den Cookies:
Loggt sich ein Benutzer ein, so wird ein 128 langer Hash erstellt, und im Cookie mit der Bezeichnung "login" gespeichert. Zusätzlich wird der Hash in der Datenbank gespeichert. Bei jedem Seitenaufruf nun wird das Cookie ausgelesen, der Hash mit der Datenbank abgeglichen, und die Benutzerdaten frisch aus der Datenbank geholt.
Loggt sich ein Benutzer aus, so wird das Cookie auf seinem Rechner ausgelesen, der Hash aus der Datenbank gelöscht, und anschließend das Cookie selbst. Sollte ein Cookie vorhanden sein, aber kein Hash in der Datenbank, so wird ebenfalls die Logout Funktion aufgerufen, welche das Cookie löscht.
Soviel zur Theorie. Nun zur Praxis:
Ein Benutzer ist eingeloggt, und arbeitet mit dem System. Dann loggt er sich wieder aus. Nun passiert aber folgendes:
Es wird die Logout Funktion aufgerufen. Das Cookie wird ausgelesen, der Hash wird aus der Datenbank gelöscht, das Cookie hingegen aber NICHT, warum auch immer. Nun erfolgt eine Weiterleitung zur Startseite (.../index.php/), und es wird die Benutzerfunktion aufgerufen, die Userdaten sammelt. Diese stellt Fest, dass das Login Cookie existiert, liest es aus, gleicht den Hash mit der Datenbank ab, stellt nun aber fest, dass der Hash in der Datenbank nicht existiert, löscht das Cookie (wobei es auch hier wieder nicht gelöscht wird), und leitet den Benutzer zur Startseite weiter.
Ergo lande ich an dieser Stelle in einer Endlosschleife, und erhalte einen Umleitungsfehler.
Aufgefallen ist mir das ganze, als ich nach dem Ausloggen nicht zur Startseite gelangt bin, sondern mehrere Fehlermeldung (auch seitens PHP erhalten habe), und dann im FireFox entdeckt habe, dass der besagte Login Cookie incl. Wert existiert, obwohl er eigentlich gelöscht sein müsste.
Nun frage ich mich, wieso das CMS die eigens gesetzten Cookies nicht erkennt!? Mit normalen Links, also index.php?site=account&op=messages funktioniert alles problemlos. Nur sobald ich die Links auf suchmaschinenfreundlich setze, kommt es eben zu den besagten Problem, dass das CMS die eigenen Cookies nicht mehr erkennt.
Arbeiten tu ich mit Apache 2.2 sowie PHP5 (AppservNetwork v2.5.7). Die Cookies setze ich mit setcookie("name", "value"), löschen tu ich sie mit setcookie("name", "").
Hat jemand von Euch ne Ahnung was da los ist!? kann das ein Bug seitens PHP Sein!? Muß ich die Cookies irgendwie entsprechend setzen oder so!? Bzw. wieso lassen die sich nicht löschen. setcookie("name", "", time()-666) z.b. hat auch nichts bewirkt.
Hoffe es kann mir jemand helfen. Bin schon echt verzweifelt diesbezüglich...
Danke schonmal!
P.s. dieser Fehler tritt gelegentlich auch beim Umschalten von normalen zu suchmaschinenfreundlich Links auf, dass das Cookie nicht erkannt und der Benutzer ungewollter Weise gleich mit ausgeloggt wird...
Habe ein kleines aber doch recht heftiges Problemchen mit meinem selbstgeschriebenem CMS. Und zwar kommt es ständig in Verbindung mit suchmaschinenfreundlichen Links dazu, dass das CMS die hauseigenen Cookies nicht erkennt. Die suchmaschinenfreundlichen Links sehen wie folgt aus:
http://localhost/cms/index.php/site/account/op/messages
Nun läuft das folgendermaßen mit den Cookies:
Loggt sich ein Benutzer ein, so wird ein 128 langer Hash erstellt, und im Cookie mit der Bezeichnung "login" gespeichert. Zusätzlich wird der Hash in der Datenbank gespeichert. Bei jedem Seitenaufruf nun wird das Cookie ausgelesen, der Hash mit der Datenbank abgeglichen, und die Benutzerdaten frisch aus der Datenbank geholt.
Loggt sich ein Benutzer aus, so wird das Cookie auf seinem Rechner ausgelesen, der Hash aus der Datenbank gelöscht, und anschließend das Cookie selbst. Sollte ein Cookie vorhanden sein, aber kein Hash in der Datenbank, so wird ebenfalls die Logout Funktion aufgerufen, welche das Cookie löscht.
Soviel zur Theorie. Nun zur Praxis:
Ein Benutzer ist eingeloggt, und arbeitet mit dem System. Dann loggt er sich wieder aus. Nun passiert aber folgendes:
Es wird die Logout Funktion aufgerufen. Das Cookie wird ausgelesen, der Hash wird aus der Datenbank gelöscht, das Cookie hingegen aber NICHT, warum auch immer. Nun erfolgt eine Weiterleitung zur Startseite (.../index.php/), und es wird die Benutzerfunktion aufgerufen, die Userdaten sammelt. Diese stellt Fest, dass das Login Cookie existiert, liest es aus, gleicht den Hash mit der Datenbank ab, stellt nun aber fest, dass der Hash in der Datenbank nicht existiert, löscht das Cookie (wobei es auch hier wieder nicht gelöscht wird), und leitet den Benutzer zur Startseite weiter.
Ergo lande ich an dieser Stelle in einer Endlosschleife, und erhalte einen Umleitungsfehler.
Aufgefallen ist mir das ganze, als ich nach dem Ausloggen nicht zur Startseite gelangt bin, sondern mehrere Fehlermeldung (auch seitens PHP erhalten habe), und dann im FireFox entdeckt habe, dass der besagte Login Cookie incl. Wert existiert, obwohl er eigentlich gelöscht sein müsste.
Nun frage ich mich, wieso das CMS die eigens gesetzten Cookies nicht erkennt!? Mit normalen Links, also index.php?site=account&op=messages funktioniert alles problemlos. Nur sobald ich die Links auf suchmaschinenfreundlich setze, kommt es eben zu den besagten Problem, dass das CMS die eigenen Cookies nicht mehr erkennt.
Arbeiten tu ich mit Apache 2.2 sowie PHP5 (AppservNetwork v2.5.7). Die Cookies setze ich mit setcookie("name", "value"), löschen tu ich sie mit setcookie("name", "").
Hat jemand von Euch ne Ahnung was da los ist!? kann das ein Bug seitens PHP Sein!? Muß ich die Cookies irgendwie entsprechend setzen oder so!? Bzw. wieso lassen die sich nicht löschen. setcookie("name", "", time()-666) z.b. hat auch nichts bewirkt.
Hoffe es kann mir jemand helfen. Bin schon echt verzweifelt diesbezüglich...
Danke schonmal!
P.s. dieser Fehler tritt gelegentlich auch beim Umschalten von normalen zu suchmaschinenfreundlich Links auf, dass das Cookie nicht erkannt und der Benutzer ungewollter Weise gleich mit ausgeloggt wird...
Kommentar