[HILFE] Riesen Problem mit Cookies!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [HILFE] Riesen Problem mit Cookies!

    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...

  • #2
    Re: [HILFE] Riesen Problem mit Cookies!

    OffTopic:
    Wieder ein sehr typisches Problem - mit ein paar aufgeschnappten Stichworten (hier: "suchmaschinenfreundliche URLs") bastelt $newbee fröhlich drauf los, ohne sich im geringsten über die Bedetung dessen, was er da veranstaltet, im klaren zu sein ...


    Ohne eine explizite Angabe, in welchem Pfad sie gültig sein sollen, sind deine Cookies nur innerhalb des aktuellen Pfades gültig - und der ist bei dir bei der genannten Beispieladresse /cms/index.php/site/account/op/

    Jede Ressource, die ausserhalb davon liegt, bekommt deshalb selbstverständlich den Cookie nicht wieder mitgeschickt.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Habe mir auch schon gedacht, dass das wohl mit den Pfaden zutun haben sollte. Aber wie mach ich nun ein Cookie Pfadunabhängig verfügbar!? Was gibt es da sonst für eine Lösung!?

      Ich habe auch schon versucht (weis nicht ob das das richtige ist) einen Pfad mitzugeben, also etwa so in der Richtung:

      setcookie("name", "wert", "", "/pfad/");
      setcookie("name", "wert", "", "pfad/");
      setcookie("name", "wert", "", "/pfad");
      setcookie("name", "wert", "", "pfad");

      Aber da wird das Cookie erst gar nicht gesetzt.

      Zugegeben der Part mit den suchmaschinenfreundlichen Links war ein Codeschnipse, der ansich recht wirksam ist. Bis eben auf das Cookie Problem...

      Kommentar


      • #4
        Original geschrieben von PHPler
        Aber da wird das Cookie erst gar nicht gesetzt.
        Dann debugge - in dem du bspw. prüfst, ob es zwar gesendet wird, aber vom Client abgelehnt. (Sprich: HTTP Response Header checken.)

        Und dann überprüfe deine Cookie-Einstellungen am Client, teste in verschiedenen Clients, etc.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          löschen tu ich sie mit setcookie("name", "").
          sinnvoller ist unset ( $_COOKIE [ 'name' ] )
          Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

          Kommentar


          • #6
            Original geschrieben von tontechniker
            sinnvoller ist unset ( $_COOKIE [ 'name' ] )
            [ ] Du hast den Unterschied zwischen client- und serverseitig begriffen.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Okay, nun bin ich mittlerweile soweit, dass der den Pfad ins Cookie setzt, wobei es immernoch Probleme gibt die Domain zu setzen, wenn $_SERVER['HTTP_HOST'] "localhost" zurückgibt. Aber das ist erstmal wurscht.

              Bleibt nur noch das Problem mit dem Löschen des Cookies. Habs zwar nun auch gelesen, dass man unter PHP5 die Cookies mit "unset" löscht. Allerdings zeigt dieser Befehl auch hier wieder keine Wirkung...

              Kommentar

              Lädt...
              X