Session funktioniert nicht, in aber Testdatei schon....?!?!?

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

  • Session funktioniert nicht, in aber Testdatei schon....?!?!?

    Hallo!

    Ich habe auf meiner Seite ein login realisiert mit Sessions.
    Programmiert und getestet habe ich die Seite auf meinem nicht mit dem Netz verbundenen Laptop, auf dem wampp2 installiert ist. Dort funktioniert alles wunderbar.
    Jetzt habe ich die Seite mal auf den 1&1 Server hochgeladen, und dort tritt folgender Fehler auf:
    Zunächst kann ich mich normal einloggen. Falls der Name oder das Passwort falsch sind, kommt eine Fehlermeldung, das funktioniert also. Die Startseite im geschützten Bereich wird fehlerfrei angezeigt. Klicke ich dort nun auf einen Link, erscheint wieder der Login - Screen --> FEHLER.
    Mit anderen Worten: Bei klick auf "login" wird, wenn Name & Pass richtig sind mit session_register("user") der User registriert. Auf den nachfolgenden Seiten wird mit if (session_is_registered("user")){ ...content...} else {...login...} dann aber in den else Zweig gesprungen, "user" ist also nicht registriert.
    Es würde jetzt sicherlich den Rahmen sprengen, wenn ich den gesamten Code der Webseite posten würde, aber ich habe dann, um den Fehler rauszufinden, folgende Testdatei geschrieben. (Dort ist das ganze exakt so gemacht wie in der Webseite!)

    Test.php:
    PHP-Code:
    <?php
    session_start
    ();
    if (
    session_is_registered('user')){
        
    session_start();
        
    $_SESSION["session_var_1"] = "Jetzt war ich eingeloggt";
        
    Seite_ausspucken();
    }
    else {
        
    $user "Stefan";
        
    session_register("user");
        
    session_start();
        
    $_SESSION["session_var_1"] = "Ich war noch nicht eingeloggt";
        
    Seite_ausspucken();
    };
    ?>

    <?php
    function Seite_ausspucken(){
        
    ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        
        </head>
        <body>
        <?php
        
    echo "Die Session id: " session_id() . "<br>";
        echo 
    "Uservariabele: " $_SESSION["user"] . "<br>";
        echo 
    "Sessionvariabele: " $_SESSION["session_var_1"] . "<br>";   
        
    ?>
        Der Link zur gleichen Seite: <a href="Test.php">Link</a>
        </body>
        </html>
        <?php
    };
    ?>
    Die Testdatei funktioniert wunderbar!!???

    Die Ausgabe nach erstem aufruf:

    Die Session id: f645b4fa5aea31af6d7f747ede51d7a5
    Uservariabele: Stefan
    Sessionvariabele: Ich war noch nicht eingeloggt
    Der Link zur gleichen Seite: Link

    Die Ausgabe nach klick auf link:

    Die Session id: f645b4fa5aea31af6d7f747ede51d7a5
    Uservariabele: Stefan
    Sessionvariabele: Jetzt war ich eingeloggt
    Der Link zur gleichen Seite: Link

    und das komische ist:
    Ich registriere mich auf der Webseite auch mit dem Usernamen "Stefan". wenn ich dann also im gleichen Browserfenster die Webseite aufrufe, bin ich sofort eingeloggt, und es funktioniert alles tadellos!
    Warum klappt das Handling mit den Sessions und das registrieren der Sessionvariabelen in meiner Testdatei tadellos, in der Webseite aber nicht??? Mit wampp2 funktioniert die Webseite doch auch?!?!
    Ach ja: Ausgaben werden auf der Webseite vor dem registrieren der Uservariabele nicht gemacht. Das zweite session_start() ist nicht schön, ist aber offensichtlich nicht das Problem.
    Ich bin echt am Verzweifeln....
    Hat jemand eine Idee, was für ein Fehler das sein könnte?

    Mfg, Stefan

    PS:
    Überings, bei der gelegenheit habe ich natürlich auch einen echten Sicherheitsbug in unendlich vielen teilweise empfohlenen loginscripts entdeckt. Ich brauche ja wirklich nur den Usernamen, dann mein testscript einmal aufrufen, und schon kann ich mit diesem Browserfenster in den Mitgliederbereich.... Wenn ich die Session ID mit in der DB abspeichere, und dann vor aufruf jeder Seite mit der aktuellen vergleiche, ist das ganze dann sicher?

  • #2
    Ach ja, die Einstellung des Servers von 1&1 findet man hier:

    http://faq.1und1.de/hosting/scripte_...ken/php/6.html

    Das wampp ist Version 2.2 (Server API Version) und läuft mit PHP Version 4.3.2 und Apache 2.0.46.

    Betriebssystem: Win XP SP2, Internet Explorer 6.0.
    Mit Opera Version 7.22 habe ich das auch getestet, gleiche Fehler.

    Kommentar


    • #3
      1)es ist nicht nur nicht schön session doppelt zu starten, sondern auch fehlerhaft. schalte mal
      error_reporting(E_ALL);

      2) ich sehe überhaupt kein Sinn session noch mal in deiner if starten.

      3)entweder arbeitest du komplett mit $_SESSION oder verwende die ältere functionen. der mischmasch was du gemacht hast ist einfach kaum zu ertragen.
      PHP-Code:
      <?php
      error_reportin
      (E_ALL);
      session_start();
      if (isset(
      $_SESSION['user'])){
          
      $_SESSION["session_var_1"] = "Jetzt war ich eingeloggt";
         }
      else {
          
      $_SESSION['user']= "Stefan";
          
      $_SESSION["session_var_1"] = "Ich war noch nicht eingeloggt";
          
      }
      Seite_ausspucken();
      ?>
      Zuletzt geändert von Slava; 11.07.2006, 11:33.
      Slava
      bituniverse.com

      Kommentar


      • #4
        Erstmal Danke für die Antwort!
        Also, ich habe jetzt folgendes versucht:
        Ich habe das error_reporting(E_ALL); eingefügt, und zwar nach dem session_start(). (Steht es davor kommen fehlermeldungen, weil schon eine Ausgabe vor dem Session_start() stattgefunden hat)
        Desweiteren habe ich alles umgeschrieben auf die neuere schreibweise $_SESSION[]

        Beim Testen der Webseite hat mir der 1&1 server eine Warning rausgegeben, weil er das zweite Session_start() gefunden hat, und dieses nun ignoriert hat. Im wampp2 kam diese Meldung nicht!(?)
        Also habe ich dann das zweite Session_start() weggemacht, nun ist auch logischerweise der Fehler weg.

        Und die Fehler, die jetzt noch ausgegeben werden sind dieser art:
        Notice: Undefined variable: user in /homepages/........../meineseite.php on line 178
        Da muss ich wohl nochmal ran, und diese Variabelen auch in der Session Speichern, und dann mit isset arbeiten.
        Diese Fehler sind auch auf beiden Systemen gleich, ABER: Der eigendliche Fehler hat sich nicht geändert. Nach wie vor klappt das login beim wampp2 und bei 1&1 nicht (siehe Ausgangsposting).
        Und nach wie vor : Wenn ich die Testdatei (die nun so wie von Slava vorgeschlagen aussieht) einmal aufgerufen habe, kann ich im gleichen Browserfenster problemlos im Mitgliederbereich rumstöbern, weil alles funktioniert.

        Kommentar


        • #5
          Hat keiner eine Idee??
          Ich bin echt am verzweifeln!!!!!!!!!
          Fehlen euch denn vieleicht informationen?

          Wenn echt keiner eine Idee hat, wo kann man diesbezüglich denn mal nachfragen?

          Überings, die Variabelenfehler, von denen ich oben berichtet habe, sind nun auch weg, ich habe alles entsprechend umgeschrieben.
          error_reporting(E_ALL) gibt nun keine Fehler mehr aus.

          Mfg,
          Stefan
          Zuletzt geändert von KleinesOnlein29; 12.07.2006, 13:25.

          Kommentar


          • #6
            juhuuuuuuuuuu!!!!!!!!
            Ich habe es! :-)
            Also Antworte ich mir mal selbst:
            Der Grund warum das Login meiner Webseite nicht funktioniert hat, die Testdatei aber schon, ist der unterschied zwischen den folgenden Dateien:

            test1.php: (Diese Datei funktioniert)
            PHP-Code:
            <?php
            session_start
            ();
            error_reporting(E_ALL);
            if (isset(
            $_SESSION["user"])){
                
            $_SESSION["session_var_1"] = "Jetzt war ich eingeloggt";
                
            Seite_ausspucken();
            }
            else {
                
            $_SESSION["user"] = "Stefan";
                
            $_SESSION["session_var_1"] = "Ich war noch nicht eingeloggt";
                
            Seite_ausspucken();
            };

            function 
            Seite_ausspucken(){
                
            ?>
                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml">
                <head>
                
                </head>
                <body>
                <?php
                
            echo "Die Session id: " session_id() . "<br>";
                echo 
            "Uservariabele: " $_SESSION["user"] . "<br>";
                echo 
            "Uservariabele: " $_SESSION["session_var_1"] . "<br>";   
                
            ?>
                Der Link zur gleichen Seite: <a href="Test.php">Link</a>
                </body>
                </html>
                <?php
            };
            ?>


            test2.php (Diese Datei funktioniert nicht)
            PHP-Code:
            <?php
            // Das ist Testdatei zum überprüfen 
            ?>

            <?php
            session_start
            ();
            error_reporting(E_ALL);
            if (isset(
            $_SESSION["user"])){
                
            $_SESSION["session_var_1"] = "Jetzt war ich eingeloggt";
                
            Seite_ausspucken();
            }
            else {
                
            $_SESSION["user"] = "Stefan";
                
            $_SESSION["session_var_1"] = "Ich war noch nicht eingeloggt";
                
            Seite_ausspucken();
            };

            function 
            Seite_ausspucken(){
                
            ?>
                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml">
                <head>
                
                </head>
                <body>
                <?php
                
            echo "Die Session id: " session_id() . "<br>";
                echo 
            "Uservariabele: " $_SESSION["user"] . "<br>";
                echo 
            "Uservariabele: " $_SESSION["session_var_1"] . "<br>";   
                
            ?>
                Der Link zur gleichen Seite: <a href="Test.php">Link</a>
                </body>
                </html>
                <?php
            };
            ?>
            Jetzt funktioniert zwar alles wunderbar, aber verstanden habe ich das noch nicht. Kann es sein, dass das ein Bug bei den 1&1 Servern ist? Auf dem Wampp2 Server machen die beiden Dateien schließlich keinen Unterschied.

            Mfg

            PS: Falls jetzt jemand einen unterschied im Code der beiden Dateien sucht: Da gibt es keinen. Der Unterschied liegt einzig und allein in dem Kommentar in der zweiten Datei, der extra mit <?php ?> eingezäunt ist.

            Kommentar


            • #7
              Original geschrieben von KleinesOnlein29
              Der Unterschied liegt einzig und allein in dem Kommentar in der zweiten Datei, der extra mit <?php ?> eingezäunt ist.
              Und hinter diesen PHP-Tags hast du erst mal eine Leerzeile eingebaut, die eine Ausgabe bedeutet, die wiederum "headers already sent ..." nach sich zieht.

              Also wieder mal das uralte Thema, was hier fünfmal pro Woche erklärt wird.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                erstens hat frager überhaupt nicht headers_already_sent gesehen, zweitens hat er auf dem testserver und dem 1&1 nicht das gleiche skript gehabt aber so getan also ob es das gleiche sei. Was wunder dass es verschieden läuft....

                Kommentar


                • #9
                  Original geschrieben von mäander_
                  erstens hat frager überhaupt nicht headers_already_sent gesehen
                  Ähm ...
                  Ich habe das error_reporting(E_ALL); eingefügt, und zwar nach dem session_start(). (Steht es davor kommen fehlermeldungen, weil schon eine Ausgabe vor dem Session_start() stattgefunden hat)
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    [irony on]
                    dann empfehle ich dringend error_reporting(0); einzusetzen und @ bei jeder Systemfunktion....
                    [irony restore]

                    Kommentar


                    • #11
                      Hmm, also manche antorten habe ich jetzt nicht richtig verstanden... (Vieleicht bin ich auch einfach zu müde, sorry)

                      @wahsaga
                      Und hinter diesen PHP-Tags hast du erst mal eine Leerzeile eingebaut, die eine Ausgabe bedeutet, die wiederum "headers already sent ..." nach sich zieht
                      Nun erstmal kam keine Fehlermeldung mehr. Allerdings hatte ich diese Fehlermeldung anfangs, als ich das error_reporting(E_ALL); VOR dem session_start() stehen hatte (auch bei der Testdatei, die auf beiden Systemen funktioniert). Als ich es dahinter geschrieben habe nicht mehr.
                      Aber was meinst du denn mit hinter den PHP Tags? Zwischen den ersten php Tags stehen ja nur Kommentare, meinst du das Leerzeichen, das dann vor dem nächsten anfangs php Tag steht? Und das wird ausgegeben?
                      Also wieder mal das uralte Thema, was hier fünfmal pro Woche erklärt wird.
                      Ein kleiner Hinweis, dass es auch sowas sein kann, hätte mir schon sehr weiter geholfen. Solche Hinweise habe ich ja gesucht, und nicht gefunden, und daher hier die Frage nach solchen Hinweisen, woran das den liegen könnte, gestellt.

                      @mäander_
                      zweitens hat er auf dem testserver und dem 1&1 nicht das gleiche skript gehabt aber so getan also ob es das gleiche sei. Was wunder dass es verschieden läuft....
                      Nun, das habe ich doch erklärt, vieleicht nicht deutlich genug:
                      Es sind 2 Scripte. Das erste lief nur auf einen der beiden Server. Das zweite lief auf beiden. Das erste war die Webseite, das zweite die hier veröffentlichte Testdatei.
                      Aber nehmen wir doch nur mal die beiden dateien aus meinem letzten posting: test1.php läuft auf beiden Servern. test2.php läuft auf dem wampp2 Server absolut fehlerfrei. Auf dem 1&1 Server kommt zwar keine Fehlermeldung durch error_reporting(E_ALL), aber es funktioniert nicht. Also die GLEICHE Datei test2.php funktioniert bei dem einen, aber bei dem anderen nicht.
                      dann empfehle ich dringend error_reporting(0); einzusetzen und @ bei jeder Systemfunktion....
                      Scherz?? Verstehe ich aber nicht, hmmm

                      Kommentar


                      • #12
                        Original geschrieben von KleinesOnlein29
                        Nun erstmal kam keine Fehlermeldung mehr. Allerdings hatte ich diese Fehlermeldung anfangs, als ich das error_reporting(E_ALL); VOR dem session_start() stehen hatte (auch bei der Testdatei, die auf beiden Systemen funktioniert). Als ich es dahinter geschrieben habe nicht mehr.
                        Und dann hat sich der Fehler einfach in Luft aufgelöst meinst du ...?
                        Aber was meinst du denn mit hinter den PHP Tags? Zwischen den ersten php Tags stehen ja nur Kommentare, meinst du das Leerzeichen, das dann vor dem nächsten anfangs php Tag steht? Und das wird ausgegeben?
                        Das ist kein Leerzeichen, sondern eine Leerzeile.

                        Und natürlich wird die ausgegeben, was denkst du denn - das PHP irgendwelche Textteile außerhalb von <?php ... ?> einfach verschluckt?
                        Ein kleiner Hinweis, dass es auch sowas sein kann, hätte mir schon sehr weiter geholfen. Solche Hinweise habe ich ja gesucht, und nicht gefunden
                        Ach komm, es gibt einen Sticky Thread zu dem blöden Thema hier im Forum.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Original geschrieben von KleinesOnlein29
                          Hmm, also manche antorten habe ich jetzt nicht richtig verstanden... (Vieleicht bin ich auch einfach zu müde, sorry)

                          @wahsaga

                          Nun erstmal kam keine Fehlermeldung mehr. Allerdings hatte ich diese Fehlermeldung anfangs, als ich das error_reporting(E_ALL); VOR dem session_start() stehen hatte (auch bei der Testdatei, die auf beiden Systemen funktioniert). Als ich es dahinter geschrieben habe nicht mehr.
                          Aber was meinst du denn mit hinter den PHP Tags? Zwischen den ersten php Tags stehen ja nur Kommentare, meinst du das Leerzeichen, das dann vor dem nächsten anfangs php Tag steht? Und das wird ausgegeben?

                          Ein kleiner Hinweis, dass es auch sowas sein kann, hätte mir schon sehr weiter geholfen. Solche Hinweise habe ich ja gesucht, und nicht gefunden, und daher hier die Frage nach solchen Hinweisen, woran das den liegen könnte, gestellt.

                          Du hast einfach nicht genug Informationen, trotz vieler Worte geliefert, und dazu noch Fallen gestellt (wenn auch unbewusst).

                          @wahsaga, das Problem mit <?php ?> <?php ?> sowie das UTF-8 könnten in den sticky thread aufgenommen werden. Ich habe nicht nachgeschaut ob es schon dort steht. Gruss.

                          Kommentar

                          Lädt...
                          X