T-Rex: Problem mit Session und Subdomain

Moin,

ich werd hier gleich nochmal verrückt... vor allem ist das mal wieder so ein Problem was einem keiner glaubt. Vor allem schwer zu erklären, ich probiers trotzdem mal.

Also hab da eine Domain und 2 Subdomains "cms" und "www". Ich möchte jetzt die Session inhalte von "cms" auch unter "www" abrufbar machen. Dafür gibt es ja tausende von Foreneinträge wie man das macht. Ich hab mich für diese hier entschieden:
http://phpforum.de/archiv_52197_Subdomain@Wechsel@@Session@verloren_anzeigen.html

Auch den Tipp bei Kommentar 5 hab ich befolgt und Cache so wie Cookies gelöscht.

Das witzige jedoch ist, die komplette Session ist leer, sobald ich von der einen Seite auf die andere springe. Aber mal langsam.

1. Ich logge mich auf "cms" ein. Nach klick auf "login" gibt es einen Seiten reload und ich bin eingeloggt - Session ist gesetzt.
2. Ich gehe auf die "www" seite und öffne Sie (oder mache einen Reload falls die seite offen ist).
3. Jetzt bin ich wieder im cms und mache dort ein reload. Die Session ist leer und ich bin ausgeloggt.

"Okay" denke ich hab ich irgendeinen bock gebaut der die komplette Session löscht. Also fang ich das debuggen an. Als erstes hab ich hinter dem session_start auf der "www" Seite ein exit gesetzt. Punkte von 1-3 wieder durchgeführt und siehe da Session ist im cms wieder leer. Ergo funktioniert das session_start nicht.

Guck ich im $_COOKIE nach ist auf beiden Seiten die gleiche PHPSESSION-ID gesetzt.

ich bin ratlos...

Gruß
fassungsloser
T-Rex

  1. Hi,

    Also hab da eine Domain und 2 Subdomains "cms" und "www". Ich möchte jetzt die Session inhalte von "cms" auch unter "www" abrufbar machen.

    Laufen die Seiten darunter alle mit den selben Einstellungen, was Sessions angeht? (Kontrolliert?)

    […] Ergo funktioniert das session_start nicht.

    Was sagt der Rückgabewert der Funktion?
    Wurde erfolgreich eine Session-ID übergeben? (Testausgabe!)

    Guck ich im $_COOKIE nach ist auf beiden Seiten die gleiche PHPSESSION-ID gesetzt.

    Gültigkeitsbereich des Cookies ist was?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. 1. Einstellungen sind beide gleich
      2. Funktion liefert true zurück
      3. Session id übergeben? Die Session_id hatte ich bei meine rtestreihe auch mal mittels session_id gesetzt, hat aber auch nix gebracht.
      4. Der Gültigkeitsbereich des Cookies ist auf dem Domainnamen .example.org

      Achja, das Phänomen, dass die Session leer ist, tritt nur auf, wenn ich das konstrukut hier als erstes im Code stehen hab:

      ini_set('session.cookie_domain','.example.org');

      Nehme ich es weg, funktioniert das mit der Session wieder. Dann wäre jedoch die Frage wie ich von "www" auf die Session von "cms" zugreifen kann?

      Gruß
      der mit den Fragezeichen über dem Kopf
      T-Rex

      1. Tach!

        ini_set('session.cookie_domain','.example.org');
        Nehme ich es weg, funktioniert das mit der Session wieder. Dann wäre jedoch die Frage wie ich von "www" auf die Session von "cms" zugreifen kann?

        Bitte nicht nur rumprobieren, sondern gezielt nachsehen. Wie funktioniert denn der Session-Mechanismus? Der Client muss die Session-ID senden. Nur damit kann der Server ihn wiedererkennen. Du schickst sie mit Cookies durch die Gegend, also schau nach, wie die Cookies zwischen Client und Server ausgetauscht werden. Dazu musst du dir die HTTP-Header ansehen. Wenn die nicht stimmen, schau nach, was der Browser für ein Cookie gespeichert hat. Beim Firefox geht das über Rechtsklick, Seiteninformationen, Sicherheit, Cookies. Da kannst du es auch gezielt löschen.

        dedlfix.

        1. Ich guck doch gezielt nach *heul*.
          Also im "cms" ist das Cookie wie folgt gesetzt:

          Name: PHPSESSID
          Inhalt: f22b5bd1cbb0bdd5bc31d053be62e028 (wobei ich eine Zahl verfälscht habe, damit mir hier niemand die Session klauen kann ;) )
          Domain: .example.org (meine Domain eben, aber genau das Schema)
          Pfad: /
          Senden für: Jeden Verbindungstyp
          Gültig bis: Ende der Sitzung

          Im "www" ist das Cookie wie folgt gesetzt:

          Name: PHPSESSID
          Inhalt: f22b5bd1cbb0bdd5bc31d053be62e028
          Domain: .example.org (meine Domain eben, aber genau das Schema)
          Pfad: /
          Senden für: Jeden Verbindungstyp
          Gültig bis: Ende der Sitzung

          Es ist der gleiche Cookie Eintrag! Wenn ich den Eintrag auf der einen Seite lösche, dann ist er auf der anderen Seite ebenfalls weg. Die Session ist jedoch immer ncoh leer :(.
          Also ich vermute das der Server die Session nicht mehr richtig laden kann.

          Gruß
          ? Fragezeichen und Nebel ?
          T-Rex

          1. Und hier ist die phpinfo Passage über die Sessions:

            http://awesomescreenshot.com/0f7rj3ydc

            Gruß
            ShorT-Rex

          2. Tach!

            Ich guck doch gezielt nach *heul*.

            Dann musst du das auch so beschreiben, ich kann das sonst nicht wissen.

            Es ist der gleiche Cookie Eintrag!

            Das ist ja kein schlechter Anfang. Was ist nun mit den HTTP-Headern? Ist da jeweils das richtige Cookie zu sehen?

            Also ich vermute das der Server die Session nicht mehr richtig laden kann.

            Frag mal das Script, welche Session-ID es sieht.

            dedlfix.

            1. Dann musst du das auch so beschreiben, ich kann das sonst nicht wissen.

              Ich hoffte das hätte ich?

              Das ist ja kein schlechter Anfang. Was ist nun mit den HTTP-Headern? Ist da jeweils das richtige Cookie zu sehen?

              also die Cookies scheinen richtig an das PHP gesendet zu werden.

              Frag mal das Script, welche Session-ID es sieht.

              //--- Gibt leer zurück
              print_r( session_id() );
              session_start();
              //--- Gibt Sessionid zurück
              print_r( session_id() );

              Die Sessionid ist die gleiche wie im Cookie.

              Es sieht so aus als ob session_start die Session leert...?
              Das sind so Momente als Entwickler....

              Gruß
              *nix*
              T-Rex

              1. Tach!

                Es sieht so aus als ob session_start die Session leert...?

                Sicherlich nicht. Bau mal ein neues ganz einfach gehaltenes Script, nur mit script_start() und einem einfachen $_SESSION-Zugriff.

                dedlfix.

                1. Hallo,

                  Bau mal ein neues ganz einfach gehaltenes Script, nur mit script_start() ...

                  session_start() natürlich - bei so viel Script und Session kann man aber auch durcheinanderkommen. ;-)

                  Ciao,
                   Martin

                  --
                  Ein Ehepaar beim Sex. Sie fragt ihn: "Woran denkst du gerade?" - Er antwortet: "Kennste sowieso nicht."
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                2. Es sieht so aus als ob session_start die Session leert...?

                  Sicherlich nicht. Bau mal ein neues ganz einfach gehaltenes Script, nur mit script_start() und einem einfachen $_SESSION-Zugriff.

                  Hab ich doch schon. Das hab ich doch auch schon beschrieben? Wenn nicht dann hier gerne nochmal.

                  1. "cms" ich logge mich ein und guck nach der Session. Die ist gefüllt und sieht gut aus. Auch nach einem reload ist alles wie es soll.

                  2. "www" habe ich auf 3 Zeilen gekürzt.
                  ini_set('session.cookie_domain','.example.org');
                  session_start();
                  exit;

                  3. Mach ich ein Reload im cms ist die Session leer. Da das script durchläuft wird die Session im laufenden Script wieder wie gewünscht gefüllt. Ein erneuter Seiten Reload hat also wieder die gewünschte Session.

                  Deshalb traue ich mich zu behaupten dass session_start() die session leert. Das deckt sich auch mit den Beschreibungen aus dem Link, den ich um 22:18 Uhr gepostet hab. Mal gucken was mein Hoster dazu sagt.

                  Gruß
                  danke für soviel Mühe!
                  T-Rex

                  1. Tach!

                    Es sieht so aus als ob session_start die Session leert...?
                    Sicherlich nicht. Bau mal ein neues ganz einfach gehaltenes Script, nur mit script_start() und einem einfachen $_SESSION-Zugriff.
                    Hab ich doch schon. Das hab ich doch auch schon beschrieben? Wenn nicht dann hier gerne nochmal.

                    Dass da der Suhosin hineinspielen könnte, hatte ich nicht bedacht und überlesen, dass das schon ein Einfachst-Script zum Testen ist. Deswegen nahm ich an, dass du vielleicht irgendwo ein Löschen in einem unübersichtlichen Code drinstehen haben könntest. Also dann ist es das nicht.

                    Und nein, es ist nicht direkt sesssion_start(), das deine Daten killt, sondern das Suhosin-Zeug - wenn es die Ursache ist. Ich kenne die Suhosin-Auswirkungen nicht, aber es kann gut sein, dass der Suhosin die Daten nicht freigibt, wenn die Domains nicht stimmen.

                    dedlfix.

                    1. Wenn man es ganz super duper genau nimmt hast du natürlich recht, es ist nicht session_start(). Irgendwo da ist jedoch der Hund begraben und ich komme als normal sterblicher Entwickler nicht an die Problemstelle ran.

                      Außerdem erwarte ich nicht, dass du das Problem 100% löst. Deswegen Frage ich ja nach Hilfe und nicht nach Lösung. Gerade du Hilfst mir immer sehr, wobei ich die Hilfe der anderen nicht schmälern möchte.

                      Gruß
                      Dankender
                      T-Rex

  2. hi,

    Also hab da eine Domain und 2 Subdomains "cms" und "www".

    Ok, der Cookie-Parameter domain ist hierzu von Interesse. Was steht denn da bei Dir?

    Hotti

    1. Ich habs gemacht wie in dem Beispiel:

      ini_set('session.cookie_domain','.domain.de');

      Nur eben meine Domain. Und das auf beiden Seiten sowohl im "cms" als auch auf der "www" Seite.

      Gruß
      kurz fassender
      T-Rex

      1. Nur eben meine Domain.

        Entspricht die dem Schema example.com? Wenn die Domäne z.B. nur 'example' heißt (keine TLD), nimmt der Browser den Cookie nicht an.

        Wie Du das alles prüfen kannst, hat Dir dedlfix schon geschrieben.

        Hotti

        --
        Lachen spricht viele Muskeln an, auch den Schließmuskel.
  3. Lösungsansatz:

    Hab nach Stunden langer Recherche und tausend probierter Keywords ENDLICH jemand mit einem ähnlichen Problem gefunden:

    http://www.easy-coding.de/session-cookie-domain-t5754.html

    Soll eine Hoster Sache sein. Werde gleich mal meinen Hoster fragen.

    Bin ja mal gespannt...

    Gruß
    mail Poet
    T-Rex

    1. Tach!

      http://www.easy-coding.de/session-cookie-domain-t5754.html
      Soll eine Hoster Sache sein. Werde gleich mal meinen Hoster fragen.

      Hoster-Sache? Die dortige Ursache wurde doch benannt: Suhosin - eine Erweiterung, die PHP härter machen soll. Schau doch erstmal nach, ob phpinfo() irgendwas mit suhosin meldet.

      dedlfix.

      1. Tach!

        http://www.easy-coding.de/session-cookie-domain-t5754.html
        Soll eine Hoster Sache sein. Werde gleich mal meinen Hoster fragen.

        Hoster-Sache? Die dortige Ursache wurde doch benannt: Suhosin - eine Erweiterung, die PHP härter machen soll. Schau doch erstmal nach, ob phpinfo() irgendwas mit suhosin meldet.

        dedlfix.

        Ich sag einfach mal vorraus dass es aktiv ist, da es die einzig logische Möglichkeit ist, es sei den session_start() wäre defekt.
        Und siehe da es ist tatsächlich aktiv...

        Echt gemein...und ich such und such und such...

        Gruß
        Dankender
        T-Rex

  4. ! GELÖST !

    Hab meinen Hoster heute mit dem Problem konfrontiert. Zu erst hat er versucht bei Suhosin  irgendwas mit Encrypt ab zu schalten. Trotzdem hat es die Situation nicht verbessert. Erst als Suhosin komplett deaktiviert wurde, konnte ich die Session auf beiden Seiten ohne Probleme benutzen.

    Vielen Dank an alle Gehirnzellen die mich unterstützt haben !

    Gruß
    der Typ, bei dem Gehirnzellen verhungern
    T-Rex