Kathrin MS: Sessions und Reload

Hallo Forums-Leser,

ich hab ein ziemlich merkwürdiges Problem.

Wenn ich über ein Formular Usernamen und Passwort abfrage, diese in einer Session speichere und dann mit vorhandenen Userdaten in einer Datenbank vergleiche, kann ich einen "normalen" Loginvorgang realisieren.

Sollte das Passwort nicht mit dem Passwort in der Datenbank übereinstimmen, dann bekommt der User "Login fehlgeschlagen" angezeigt - und die Sessiondaten werden gelöscht. (Das kann ich auch über eine echo-Ausgabe kontrollieren.)

Wenn an genau dieser Stelle jetzt aber ein Reload durchgeführt wird, dann bekommt der user den ganz normalen Willkommensbildschirm angezeigt, als wenn er sich richtig eingeloggt hätte! (Hierbei bleiben die Sessionvariablen ebenfalls leer - hat also nix mit Cache oder so zu tun.)

Ich hab auch schon verschiedene Sachen durchprobiert, aber ich hab wahrscheinlich gerade Tomaten auf den Augen.
Wär superklasse, wenn mir hier einer auf die Sprünge helfen könnte.

Grübelnde Grüße
Kathrin MS

  1. Moin!

    Wenn an genau dieser Stelle jetzt aber ein Reload durchgeführt wird, dann bekommt der user den ganz normalen Willkommensbildschirm angezeigt, als wenn er sich richtig eingeloggt hätte! (Hierbei bleiben die Sessionvariablen ebenfalls leer - hat also nix mit Cache oder so zu tun.)

    Fehler im System, würde ich sagen. Irgendwie ist es erlaubt, die Seite abzurufen, ohne daß man sich anmeldet. Kannst du die Seite denn direkt ohne Login per URL aufrufen? Was passiert dann?

    Ohne Quelltext kann man dazu aber herzlich wenig sagen.

    - Sven Rautenberg

    1. Hi,

      Ohne Quelltext kann man dazu aber herzlich wenig sagen.

      ich wollte nicht gleich mit dem Quelltext hier hereinplatzen...

      Wenn ich die Seite direkt aufrufe, dann ist nix in den Sessionvariablen gespeichert, aber der Willkommensbildschirm wird angezeigt.

      Hier wird die Session eröffnet:

      @session_start();
          if (isset($HTTP_POST_VARS["submit"]))
              {
                  session_register("s_user", "s_pass");
                  $s_user = $HTTP_POST_VARS["s_user"];
         $s_pass = md5($HTTP_POST_VARS["s_pass"]);

      header( "Location: http://"
                          .getenv("SERVER_NAME")
                          ."/custom.php");
                  exit;
              }

      Hier der Ausschnitt, welcher entscheidet, ob man eingeloggt ist, oder nicht (das steht in einer neuen Datei (custom.php) als erstes):

      @session_start();

      $user = $HTTP_SESSION_VARS["s_user"];
       $pass = $HTTP_SESSION_VARS["s_pass"];
      .
      .
      .
      (da kommt noch Quelltext zur Formatierung und der Datenbank-Connect)
      .
      .
      .

      if ($user_db == $user && $pass_db == $pass)
       {echo "Willkommen $user!";
       echo "<br><br><a href=cal.php>Zum Terminkalender</a>";}
      else
       {echo "Login fehlgeschlagen";
       session_destroy();}

      Hm...hoffentlich war das jetzt nicht zu unübersichtlich. Aber viel mehr php ist da gar nicht dazu - eigentlich müsste sich der Fehler hier irgendwo verstecken.

      Viele Grüße
      Kathrin MS

      1. vielleicht liegt es daran, das der header nochmals nur gesendet wird bzw. das exit ausgeführt wird wenn er in den if-Zweig:

        if (isset($HTTP_POST_VARS["submit"]))

        reinläuft. Dazu ist der zusammenhängende Sourcecode aber hilfreicher. Ich teste das immer mit echo-ausgaben, wo das programm langläuft und wo nicht.

        Besser wäre es aber eine Session erst aufzubauen, nachdem das Passwort und die UserID mit der DB verglichen wurde und korrekt ist. Dazu reicht dann vielleicht auch nur die PersonalID bzw. UserID mit der du dann auf den nächsten Seiten diverse Infos aus der DB ziehen kannst.

        Cu Rico

        1. Hi,

          Besser wäre es aber eine Session erst aufzubauen, nachdem das Passwort und die UserID mit der DB verglichen wurde und korrekt ist. Dazu reicht dann vielleicht auch nur die PersonalID bzw. UserID mit der du dann auf den nächsten Seiten diverse Infos aus der DB ziehen kannst.

          Danke, so werd ich es mal probieren!
          Vielleicht benötige ich im Moment noch gar keine Sessions, weil ja eh nur einmal der Kalender angezeigt werden soll.

          Gruß
          Kathrin MS

      2. Moin!

        Die Strategie mit echos im Quelltext ist seht gut. Die Auszüge deines Quelltextes sind nämlich noch nicht sonderlich aussagekräftig.

        ich wollte nicht gleich mit dem Quelltext hier hereinplatzen...

        Quelltext als txt-Datei auf einen Server packen und verlinken wäre eine Alternative. Es ist immer wieder nervig, wenn man vor der eigentlichen Hilfestellung die Informationen mühsam anfordern muß. Allerdings ist es genauso doof, wenn jemand ellenlang Quelltext postet, sein Problem aber ganz woanders liegt. Verlinken ist da IMO am besten.

        Ansonsten fällt mir zum Quelltext nur ein:

        @session_start();

        $user = $HTTP_SESSION_VARS["s_user"];
        $pass = $HTTP_SESSION_VARS["s_pass"];
        .
        .
        .
        (da kommt noch Quelltext zur Formatierung und der Datenbank-Connect)

        Der wäre ganz interessant gewesen. Wie holst du die Datenbankeinträge? Was steht aufgrund welcher Vorgänge hinterher in $user_db und $pass_db?

        if ($user_db == $user && $pass_db == $pass)
        {echo "Willkommen $user!";
        echo "<br><br><a href=cal.php>Zum Terminkalender</a>";}
        else
        {echo "Login fehlgeschlagen";
        session_destroy();}

        Du mußt bedenken, daß $user leer bleibt, wenn die Session nicht existiert. Wenn du damit die Datenbankabfrage fütterst, wird sie einen User mit Namen "" nicht finden, und $user_db bleibt möglicherweise auch leer. Aber es gilt "" == "", also erlaubst du den Zugriff. Das gleiche Spiel gilt fürs Paßwort.

        Möglicherweise jedenfalls, denn ohne Quelltext kann man das nicht entscheiden. Du solltest aber in dieser Richtung forschen.

        - Sven Rautenberg

    2. Hallo,
      bin zwar auch nicht gerade der Meister aber arbeite gerade an etwas ähnlichem.
      Setzte einfach eine if Abfrage um die "Willkommen-Seite". so das diese erst angezeigt wird wenn das PW und Usernamne mit dem von der  DB übereinstimmen.

      MfG. Andreas

      Moin!

      Wenn an genau dieser Stelle jetzt aber ein Reload durchgeführt wird, dann bekommt der user den ganz normalen Willkommensbildschirm angezeigt, als wenn er sich richtig eingeloggt hätte! (Hierbei bleiben die Sessionvariablen ebenfalls leer - hat also nix mit Cache oder so zu tun.)

      Fehler im System, würde ich sagen. Irgendwie ist es erlaubt, die Seite abzurufen, ohne daß man sich anmeldet. Kannst du die Seite denn direkt ohne Login per URL aufrufen? Was passiert dann?

      Ohne Quelltext kann man dazu aber herzlich wenig sagen.

      • Sven Rautenberg