Thomas: PHP und Sessions

Hallo SelfHTMLer!

Hätte mal eine Frage bzgl. Sessions in PHP:
Ich habe einen Loginbereich der mit Sessions funktioniert. Nach erfolgreicher Authentifizierung des Benutzers wird $_SESSION['logged_in'] auf true gesetzt.
Auf allen Seiten des internen Bereiches wird geprüft ob diese Variable auf true ist, ansonsten wird auf die Login-Seite weitergeleitet.
Als ich mit dem Programmieren dieses Systems anfing, übergab ich die Session_id nicht über die URL sondern ließ sie einfach automatisch in ein Cookie schreiben -> Funktionierte im Firefox auch ohne Probleme. Als ich dann mein System einmal mit dem IE7 testete, stellte ich fest, dass er die Cookies nicht speichert sondern die Session_id über die URL haben möchte. Ich hätte das gelöst indem ich an die URL einfach noch die Konstante SID anhänge und fertig.
Meine Frage nun: Ist das der richtige Weg? Falls der Browser Cookies akzeptiert ist SID ja nicht gesetzt und es wird auch nichts angehängt. Oder soll ich User darauf hinweisen, dass Cookies akzeptiert werden müssen bevor sie sich einloggen können und das ganze nur über die Cookies machen?

Liebe Grüße und Danke
Thomas

  1. Hello,

    PHP ist eigentlich von Haus aus relativ fähig. Sofern du bei deiner Installation Einfluss auf die PHP-Einstellungen hast, schau dir mal die Einstellungen wie sesion.use_only_cookies oder session.use_trans_sid an.
    Die ermöglichen es PHP automatisch diese Entscheidung zu treffen* und ggf. auf die URL auszuweichen. Dann brauchst du dich auch nicht mehr um das Anhängen der SID zu kümmern.

    MfG
    Rouven

    * korrigiert mich wenn ich falsch liege, habe das irgendwie so in Erinnerung, oder weicht PHP dann sicherheitshalber auf beides gleichzeitig aus?!

    --
    -------------------
    When the only tool you've got is a hammer, all problems start to look like nails.
    1. hi,

      * korrigiert mich wenn ich falsch liege, habe das irgendwie so in Erinnerung, oder weicht PHP dann sicherheitshalber auf beides gleichzeitig aus?!

      Den ersten Versuch, wenn die Session gerade erstmalig gestartet wurde, macht PHP dann mit "beidem" - es versucht, einen Cookie zu setzen, _und_ gibt die SID als Parameter in site-internen Links und Formularen mit. Es kann schließlich zu dem Zeitpunkt noch nicht wissen, ob der Client den Cookie akzeptieren wird.
      Beim nächsten Request schickt der Client dann den Cookie entweder wieder mit - dann geht PHP davon aus, dass es dieses Verhalten auch für den Rest der Sitzung erwarten darf, und nutzt nur noch den Cookie zur Übergabe der SID. Oder es wird nicht wieder mitgeschickt - dann fügt PHP weiterhin die SID an Links und in Formulare ein.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. »»Oder es wird nicht wieder mitgeschickt - dann fügt PHP weiterhin die SID an Links und in Formulare ein.

        Die SID muss ich aber schon selber anhängen oder? - War bei mir jedenfalls immer der Fall.

        1. Hallo Thomas,

          Die SID muss ich aber schon selber anhängen oder? - War bei mir jedenfalls immer der Fall.

          Nur wenn du in der Konfiguration
             session.use.trans_sid = 0
          gesetzt ist.

          Schöne Grüße,

          Johannes

          1. Hallo nochmals!

            Ich habe es jetzt so gelöst, dass ich immer die Konstante SID in diesem Format www.url.com?SID&s=1 anhänge, egal ob ein Cookie gesetzt wurde oder nicht. Falls eines gesetzt wurde ist SID ja leer und die URL würde so aussehen www.url.com?&s=1 - Das & stört doch nicht, oder sollte ich besser prüfen ob SID existiert und dann eben die URL so angeben: www.url.com?s=1
            Falls es sonst noch was bei Sessions mit PHP zu beachten gibt, bin ich für Infos dankbar.

            Liebe Grüße
            Thomas

            1. Hello,

              wie Johannes schon sagte: PHP kümmert sich bei Formularen, Links etc. automatisch um das Anhängen der SID, sofern es richtig konfiguriert ist. Spar dir die Mühe zu filtern ob und wann und wo, es ist überflüssige Arbeit.

              MfG
              Rouven

              --
              -------------------
              "I wish it need not have happened in my time" - "So do I, and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us."  --  J.R.R. Tolkien: "The Lord Of The Rings: The Fellowship Of The Ring"
              1. Naja das Problem ist nur, dass ich auf die PHP-Konfiguration keinen Zugriff/Einfluss habe und deshalb die Frage wie es am klügsten zu machen ist.

                Liebe Grüße
                Thomas

            2. Hi,

              Ich habe es jetzt so gelöst, dass ich immer die Konstante SID in diesem Format www.url.com?SID&s=1 anhänge, egal ob ein Cookie gesetzt wurde oder nicht. Falls eines gesetzt wurde ist SID ja leer und die URL würde so aussehen www.url.com?&s=1 - Das & stört doch nicht

              ich würde SID dennoch ans Ende setzen. Dein Problem ist, dass die Session-Automatik nur in HTML-Code funktioniert, weshalb ja für PHP-Ausgaben die Konstante SID zur Verfügung steht - und diese kann man auch wie Variablen abfragen... Leerstring -> Nicht notwendig.

              freundliche Grüße
              Ingo

  2. Lieber Thomas,

    wenn der Browser Cookies akzeptiert, dann wird die Konstante SID nicht befüllt, jedenfalls zeigen meine URLs in einem solchen Fall keine SessionID an. Das kann PHP offensichtlich automatisch.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.