WernerK: Login / Session Problem im Netzwerk mit Servername

Hallo,

mir ist heute etwas seltsames aufgefallen. ich habe es mal in die Rubrik Webhosting reingetan weil es vermutlich kein PHP Problem ist. Es geht hier rein um eine Testumgebung mit 2 PC im Intranet. Ein XAMPP mit einer kleinen Webanwendung. Diese Anwendung hat ein Login System wo ein Anwender sich anmelden muss. (Mit Sessions und Speicherung in DB) Der XAMPP PC hat z.b. die IP Adresse 192.168.110.70, PCname = XamppTestPC Auf dem gleichen lokalen PC ist alles ok. Wenn man nun aber über das Netzwerk von einem anderen PC auf diesen XAMPP bzw. URL zugreift mit Rechnername, dann klappt zwar der Login. Aber sobald man die Seite refresht oder was macht, fliegt man wieder raus und landet wieder auf dem Login Screen.

Beispiel URL: http://XamppTestPC/MeineApp/index.php

Wenn ich hingegen die IP Adresse angebe ist alles ok. http://192.168.110.70/MeineApp/index.php

Woran liegt dies? Ist dies eine Apache Konfigurations Angelegenheit?

Gruss Werner

  1. Hallo,

    Beispiel URL: http://XamppTestPC/MeineApp/index.php

    Wenn ich hingegen die IP Adresse angebe ist alles ok. http://192.168.110.70/MeineApp/index.php

    Siehe Domain-Parameter in einem Cookie.

    MfG

    1. Hallo,

      Siehe Domain-Parameter in einem Cookie.

      hmm, ich habe jetzt zwar mal im PHP Manual bei Cookies nachgeschaut, aber ich mach das ja ohne Cookies und nur mit Server Session und DB eintrag.

      Gruss Werner

      1. Tach!

        hmm, ich habe jetzt zwar mal im PHP Manual bei Cookies nachgeschaut, aber ich mach das ja ohne Cookies und nur mit Server Session und DB eintrag.

        Bitte spezifiziere das etwas genauer. Du verwendest keinen Cookie, sagst du. Was aber ist mit "Server Session" gemeint? Ist das PHPs eingebauter Session-Mechanismus mit session_start() und so weiter? Wenn ja, dann setzt diese Funktion einen Cookie, wenn du das nicht wegkonfiguriert hast. Ohne Cookie könnte ich mir nur vorstellen, dass du sowohl Cookie zum Transport der Session-ID als auch das Anhängen der Session-ID an die URL wegkonfiguriert hast. Dann kann der Browser auch keine Session-ID senden. (Mein anderer Verdacht im anderen Zweig dieses Threads basiert darauf, dass ein Cookie verwendet wird, und die Browser in deiner Konstellation Probleme machen.)

        dedlfix.

        1. Hallo, ich habe die Ursache herausgefunden: Ist ein wenig tricky :-)

          Falls es jemanden interessiert:

          Das Login System speichert den Login mit Userloginame, einer UIN und unter anderem mit der IP Adresse des Client PC. Die Spalte "IP" in der DB war varchar(15).

          Wenn man sich nun mit der IP in der URL verbindet: http://192.168.110.70/MeineApp/index.php

          dann steht in der DB in der Spalte auch 192.168.11.70 drin.

          Wenn man sich nun aber mit dem XAMPP Computernamen verbindet, dann wird die IP v6 Adresse genommen (weil das halt default an ist) und in die Spalte IP soll der Wert z.b. fe80::c443:4c78:f773:fddd eingetragen werden. Aber da reicht halt varchar(15) nicht mehr.

          Gruss Werner

          1. Hallo, ich habe die Ursache herausgefunden: Ist ein wenig tricky :-)

            Falls es jemanden interessiert:

            Liebernich.

            Das Login System speichert den Login mit Userloginame, einer UIN und unter anderem mit der IP Adresse des Client PC. Die Spalte "IP" in der DB war varchar(15).

            Eine Session wird auf HTTP-Ebene aufgebaut, was soll das mit der IP-Adresse? Die kannst Du möglicherweise speichern, aber in einer Anwendung darf die keine Rolle spielen.

            eingetragen werden. Aber da reicht halt varchar(15) nicht mehr.

            Die IP-Adresse ist ein integer, 32 oder 128 bit.

            Schöne Grüße.

            Tags: Nameserver, Virtual Name Based Hotties ;)

            1. Hallo,

              Eine Session wird auf HTTP-Ebene aufgebaut, was soll das mit der IP-Adresse? Die kannst Du möglicherweise speichern, aber in einer Anwendung darf die keine Rolle spielen.

              und warum bitte nicht? Was ist daran falsch ein Login System zu machen das neben dem User Loginnamen auch noch die IP Adresse speichert / vergleicht?

              Die IP-Adresse ist ein integer, 32 oder 128 bit.

              und wie speichert man dann die Punkte? 192.168.11.123

              Gruss Werner

              1. Tach!

                Was ist daran falsch ein Login System zu machen das neben dem User Loginnamen auch noch die IP Adresse speichert / vergleicht?

                Eine IP-Adresse ist kein zur Identifikation geeignetes Merkmal. Sie kann wechseln, auch während einer Session. Mit der IPv6 Privacy Extension wird das sogar wesentlich häufiger der Fall werden.

                Die IP-Adresse ist ein integer, 32 oder 128 bit. und wie speichert man dann die Punkte? 192.168.11.123

                Gar nicht. Braucht man nicht. Zwischen jedes Byte kommt ein Punkt in der lesbaren Form bei IPv4. IPv6 hat eine komplexere Darstellungsregeln. Vor allem da ist es möglich ein und dieselbe Adresse unterschiedlich zu schreiben, beispielsweise mit und ohne Auslassen von in Rudeln auftretenden 0en.

                dedlfix.

                1. Hallo,

                  Gar nicht. Braucht man nicht. Zwischen jedes Byte kommt ein Punkt in der lesbaren Form bei IPv4.

                  hm, verstehe ich immer noch nicht. Angenommen man will die IP 10.140.151.10 in einer Spalte als int speichern. Wenn ich dich richtig verstehe soll es dann in der Art sein. 1014015110

                  Wie willst du das jetzt aber später wieder in lesbarer Form ausgeben? Das könnte doch die Adresse:

                  10.140.151.10

                  oder aber auch:

                  101.40.151.10

                  sein?

                  Gruss Werner

                  1. Hallo,

                    hm, verstehe ich immer noch nicht.

                    Byte

                    Gruß Kalk

                  2. Tach!

                    Gar nicht. Braucht man nicht. Zwischen jedes Byte kommt ein Punkt in der lesbaren Form bei IPv4. hm, verstehe ich immer noch nicht. Angenommen man will die IP 10.140.151.10 in einer Spalte als int speichern. Wenn ich dich richtig verstehe soll es dann in der Art sein. 1014015110

                    Nein. Das sind keine 4 Byte, das ist eine Ziffernzeichenfolge mit Punkten dazwischen. Wenn du die IP-Adresse als String bekommst, musst du sie erst in einen Integer-Wert umwandeln, beispielsweise mit PHPs inet_pton(). Das ergibt einen 4-Byte-Integer-Wert. Der ist dann auch immer eindeutig, egal ob zum Beispiel die IP-Adresse mit oder ohne führende Nullen geschrieben wurde.

                    Dasselbe geht mit der Funktion auch mit IPv6-Adressen, dann sind die tausenderlei Schreibweisen trotzdem vergleichbar.

                    Wie willst du das jetzt aber später wieder in lesbarer Form ausgeben?

                    inet_ntop()

                    dedlfix.

                  3. Hallo,

                    Gar nicht. Braucht man nicht. Zwischen jedes Byte kommt ein Punkt in der lesbaren Form bei IPv4.

                    hm, verstehe ich immer noch nicht. Angenommen man will die IP 10.140.151.10 in einer Spalte als int speichern. Wenn ich dich richtig verstehe soll es dann in der Art sein. 1014015110

                    In der Art. Aber nicht so.

                    10 * 255^3 + 140 * 255^2 + 151*255^1 + 10 * 255^0 = 174955765

                    Bei IPv6 kannst Du die Formel auch so aufbauen:

                    Pv6-Adressen werden gewöhnlicherweise hexadezimal notiert, wobei die Zahl in acht Blöcke zu jeweils 16 Bit (4 Hexadezimalstellen) unterteilt wird.

                    Maximum: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

                    Das bedeutet, auf vielen Systemen kann es schwierig werden, diese als Integer zu behandeln.

                    Nicht vergessen:

                    "ffff:ffff:ffff:ffff::::0" ist nur eine andere Schreibweise von "ffff:ffff:ffff:ffff:0000:0000:0000:0000"

                    Jörg Reinholz

  2. Tach!

    Wenn man nun aber über das Netzwerk von einem anderen PC auf diesen XAMPP bzw. URL zugreift mit Rechnername, dann klappt zwar der Login. Aber sobald man die Seite refresht oder was macht, fliegt man wieder raus und landet wieder auf dem Login Screen. Beispiel URL: http://XamppTestPC/MeineApp/index.php

    Wenn der Domainname wie hier im Beispiel nur einteilig ist, dann mögen das die Browser nicht. Jedenfalls glaube ich, mich daran zu erinnern, dass es so ist, dass ein solcher einteiliger Name wie eine Top-Level-Domain aussieht und die Browser dafür kein Cookie akzeptieren. Probier mal einen mehrteiligen Namen mit Punkt drin. Du könntest die Namen im internen Netzwerk zum Beispiel auf .local oder .test enden lassen.

    dedlfix.

    1. Hallo,

      würde es denn vielleicht etwas verändern wenn man in der Apache httpd.conf den Servername auf "XamppTestPC" ändert? Oder in der Windows hosts Datei die Zuordnung PCname und IP macht?

      Gruss Werner

      1. Tach!

        würde es denn vielleicht etwas verändern wenn man in der Apache httpd.conf den Servername auf "XamppTestPC" ändert? Oder in der Windows hosts Datei die Zuordnung PCname und IP macht?

        Nein, wenn es die Ursache ist, die ich annehme, dann ist der Browser der Spielverderber. Der braucht einen mehrteiligen Domainnamen (IP-Adresse erfüllt es auch). Es hilft nicht, anderswo was zu drehen, wenn der Name einteilig bleibt.

        dedlfix.

        1. Hallo,

          Es hilft nicht, anderswo was zu drehen, wenn der Name einteilig bleibt.

          Willst du damit sagen, dass es nicht sinnvoll ist, die Hupe lauter einstellen zu lassen, wenn die Bremsen defekt sind?

          Gruß Kalk

    2. Tach!

      Wenn der Domainname wie hier im Beispiel nur einteilig ist, dann mögen das die Browser nicht. Jedenfalls glaube ich, mich daran zu erinnern, dass es so ist, dass ein solcher einteiliger Name wie eine Top-Level-Domain aussieht und die Browser dafür kein Cookie akzeptieren.

      Cookies funktionieren mit jedem beliebigen Domänennamen, auch wenn da kein Punkt enthalten ist.

      MfG

      1. Tach!

        Cookies funktionieren mit jedem beliebigen Domänennamen, auch wenn da kein Punkt enthalten ist.

        http://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain

        dedlfix.

        1. Tach!

          Cookies funktionieren mit jedem beliebigen Domänennamen, auch wenn da kein Punkt enthalten ist.

          http://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain

          1. Der im Cookie gesendete Wert zum domain-Parameter muss mit derjenigen Domäne übereinstimmen, auf welcher die Seite ausgeliefert wurde, 1a) ein vorangestellter Punkt teilt dem Browser mit, dass er den Cookie auch an die Subdomäne senden darf (issue www), auch in diesem Fall wird der Cookie gespeichert,

          2. heißt die Domäne localhost, speichert der Browser den Cookie nicht.

          Zu (2) vermute ich, dass es mit der IP-Stack-Implementierung auf dem jeweiligen System, einschließlich Browser zusammenhängt. Weitere Recherchen gehen ins Kraut ;)

          Schönes Wochenende.

          1. Tach!

            Cookies funktionieren mit jedem beliebigen Domänennamen, auch wenn da kein Punkt enthalten ist. http://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain

            1. Der im Cookie gesendete Wert zum domain-Parameter muss mit derjenigen Domäne übereinstimmen, auf welcher die Seite ausgeliefert wurde,

            Es muss gar kein Domain-Attribut vorhanden sein (RFC 6265 (4.1.2.3)). In dem Fall gilt der Cookie nur für den originalen Server. Für das vermutete Problem kann man jedenfalls davon ausgehen, dass kein abweichender Domain-Name im Spiel ist.

            Im verlinkten Fall und in dem Fall in meiner Erinnerung gab es auch kein Problem mit unterschiedlichen Namen. Einige Browser haben sich schlicht wegen der einteiligen Domain geweigert. Mir ist das nie wieder vorgekommen, weil ich seit dem immer einen mehrteiligen Hostnamen inklusive Domain verwende. Es kann gut sein, dass die Browser ihr Verhalten von damals aufgegeben habe.

            1a) ein vorangestellter Punkt teilt dem Browser mit, dass er den Cookie auch an die Subdomäne senden darf (issue www), auch in diesem Fall wird der Cookie gespeichert,

            Ein vorangestellter Punkt ist veraltet und wird gemäß RFC 6265 (4.1.2.3) ignoriert.

            1. heißt die Domäne localhost, speichert der Browser den Cookie nicht.

            (M)ein aktueller Firefox speichert auch bei localhost.

            Zu (2) vermute ich, dass es mit der IP-Stack-Implementierung auf dem jeweiligen System, einschließlich Browser zusammenhängt.

            Der TCP/IP-Stack hat mit Protokollen wie HTTP nichts mehr am Hut. Das sind Ebenen oberhalb seines Aufgabengebiets. Üblicherweise werden diese Protokolle in Anwendungen implementiert (oder in Komponenten, die von Anwendungen genutzt werden können).

            dedlfix.

    3. Hallo,

      Du könntest die Namen im internen Netzwerk zum Beispiel auf .local oder .test enden lassen.

      hmm, wie meinst du das mit .local. Meinst du den Computernamen wo der XAMPP läuft ändern von XamppTestPC zu XamppTestPC.local? Aber das ist nicht erlaubt.

      Oder meinst du einfach in der URL XamppTestPC.local angeben?

      Gruss Werner

      1. Tach!

        Meinst du den Computernamen wo der XAMPP läuft ändern von XamppTestPC zu XamppTestPC.local? Aber das ist nicht erlaubt.

        Das wäre eine Möglichkeit gewesen.

        Oder meinst du einfach in der URL XamppTestPC.local angeben?

        Das wird nicht aufgelöst, wenn du nicht in deinem DNS-Server oder deiner lokalen hosts-Datei (in jedem Rechner einzeln, der darauf zugreifen soll) einen entsprechen Eintrag zum Auflösen dieses Namens zur IP-Adresse einfügst.

        Oder wie gesagt, du nimmst die IP-Adresse statt des Namens.

        Wenn du den Namen änderst und im Apachen einen namensbasierten VHost konfiguriert hast, muss du dort auch Änderungen vornehmen, beispielsweise einen ServerAlias eintragen.

        dedlfix.