Login funktioniert nicht korrekt

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

  • Login funktioniert nicht korrekt

    Hallo

    Ich hab da ein Problem mit meinem Loginscript.
    Und zwar kann ich mit ihm wunderbar einloggen. Die SessionID wird in der
    datenbank gespeichert und ich komme auch auf alle meine geschützten
    seiten.

    Benutze ich den logout Link kann ich auch danach wieder ohne probleme
    einloggen.

    Allerdings wenn ich den Browser schliesse ohne mich vorher über den link
    ausgeloggt zu haben hab ich trotz erneutem login über die login.php
    keinerlei chance auf meine geschützten seiten zu gelangen.
    ER sagt mir immer wieder "Sie sind nicht eingeloggt".

    Ich kann das ganze nicht ganz nachvollziehen, da die sessionID bei jedem
    login neu in die datenbank geschrieben wird und eigentlich das kein problem machen sollte.
    ich hoffe ihr habt da ein paar tipps oder findet den fehler in meinem script.


    Das Login Script:
    PHP-Code:
    <? 
    session_start(); 
    include 'sessionhelpers.inc.php'; 

    if (isset($_POST['login'])) 

        $userid=check_user($_POST['username'], $_POST['userpass']); 
        if ($userid!=false) 
            login($userid); 
        else 
            echo 'Ihre Anmeldedaten waren nicht korrekt!'; 

    if (!logged_in()) 
        echo '<form method="post" action="login.php">
      <div align="center">
        <label></label>
        <font size="2" face="Verdana, Arial, Helvetica, sans-serif"> <br>
        </font>
        <table width="99%" border="0">
          <tr> 
            <td><div align="center"><font size="2" face="Verdana, Arial, 
    Helvetica, sans-serif">User:</font></div></td>
          </tr>
          <tr> 
            <td><div align="center"><font size="2" face="Verdana, Arial,
     Helvetica, sans-serif"> 
                <input name="username" type="text">
                </font></div></td>
          </tr>
          <tr> 
            <td><div align="center"><font size="2" face="Verdana, Arial, 
    Helvetica, sans-serif">Password:</font></div></td>
          </tr>
          <tr> 
            <td><div align="center"><font size="2" face="Verdana, Arial,
    Helvetica, sans-serif"> 
                <input name="userpass" type="password" id="userpass2">
                </font></div></td>
          </tr>
          <tr> 
            <td><div align="center"><font size="2" face="Verdana, Arial, 
    Helvetica, sans-serif"> 
                <input name="login" type="submit" id="login2" value="Sign in">
                </font></div></td>
          </tr>
        </table>
        <font size="2" face="Verdana, Arial, Helvetica, sans-serif">
        <label></label>
        <br>
        </font> </div>
    </form>'; 
    else 

        echo '<a href="logout.php">Ausloggen</a>'; 
    echo '<p /><a href="forgot.php">forgot password?</a>'; 
    echo '<p /><a href="register.php">Register</a>'; 
    ?>

    Sessionhelpers.inc.php
    PHP-Code:
    <? 
    function connect() 

        $con= mysql_connect('localhost','.......','.......') or die(mysql_error()); 
         mysql_select_db('......',$con) or die(mysql_error()); 


    function check_user($name, $pass) 

        $sql="SELECT UserId 
        FROM users 
        WHERE UserName='".$name."' AND UserPass=MD5('".$pass."') AND 
    active='1'
        LIMIT 1"; 
        $result= mysql_query($sql) or die(mysql_error()); 
        if ( mysql_num_rows($result)==1) 
        { 
            $user=mysql_fetch_assoc($result); 
            return $user['UserId']; 
        } 
        else 
            return false; 


    function login($userid) 

           
        $sql="UPDATE users 
        SET UserSession='".session_id()."' 
        WHERE UserId=".$userid; 
         mysql_query($sql); 


    function logged_in() 

        $sql="SELECT UserId 
        FROM users 
        WHERE UserSession='".session_id()."' 
        LIMIT 1"; 
        $result= mysql_query($sql); 
          return ( mysql_num_rows($result)==1); 


    function logout() 

        $sql="UPDATE users 
        SET UserSession=NULL 
        WHERE UserSession='".session_id()."'"; 
         mysql_query($sql); 


    connect(); 
    ?>

    Geschützte Seite:
    PHP-Code:
    <? session_start(); 
      
    include 'sessionhelpers.inc.php'; 
     
    if (!logged_in()) {
        echo 'Sie sind nicht eingeloggt'; 
    } else {
    ... 
    Inhalt
    ...
    }
    ?>
    Logout Script:
    PHP-Code:
    <? session_start(); 
    include 'sessionhelpers.inc.php'; 
    logout(); 
    echo 'Sie sind '; 
    if (!logged_in()) 
        echo 'nicht mehr'; 
    echo 'eingeloggt.< p/>'; 
    echo '<a href="login.php">Einloggen</a>'; 

    ?>
    Zuletzt geändert von timo75; 22.07.2005, 14:07.

  • #2
    Brech mal deinen Code um, horiziontal scrollen nervt!

    Wie ich sehe hast du das Login-Skript von MrHappiness als Basis benutzt:

    Hab mir das Original schon länger nicht mehr angesehen, aber an das

    PHP-Code:
     ... AND active='1' ... 
    Kann ich mich nicht erinnern.

    Wo wird diese Variable überhaupt in die DB geschrieben?

    Da sie in check_user() auftaucht könnte das die Fehlerquelle sein!

    Brech mal deinen Code um, horiziontal scrollen nervt!

    Kommentar


    • #3
      Die Variable hab ich nachträglich eingefügt.
      Ist auch in der DB vorhanden.
      DIe wird genutzt, um per EMaillink den User zu aktivieren.

      Daran liegts aber nicht. Habs auch schonmal ohne das "AND active =1" versucht.

      Kommentar


      • #4
        Was hast du an dem " Brech mal deinen Code um" nicht verstanden? Bitte sofort nachholen!

        wie sieht deine Tabelle aus?

        Kommentar


        • #5
          Original geschrieben von TobiaZ
          Was hast du an dem " Brech mal deinen Code um" nicht verstanden? Bitte sofort nachholen!

          wie sieht deine Tabelle aus?
          Hab den Text doch schon umgebrochen.. Ich versuchs noch mal mehr umzubrechen.
          Sorry aber schwierig wenn man es nicht sehen kann da ich ne hohe auflösung fahre.

          Die Tabelle ist in ordnung. Habe mitlerweile herausgefunden das es irgendwas mit den Frames zu tun haben muss.

          Wenn ich die scripte direkt startet fuinktioniert alles. Aber wenn ich hein Headerframe eingebaut hab indem die Links sich befinden klappt es nicht mehr.

          Kommentar


          • #6
            da ich im moment echt zu faul bin alles zu lesen, würde ich aber mindestens beim logout die Daten löschen und nicht nur ein Update drauf machen, oder was willst Du noch mit den Daten ??

            und beim zweiten login prüfe mal die Session ID die er angeblich in die DB geschrieben hatte, oder auch nicht, dann wirst Du es sehen, prüfe also ob die ID auch in der DB ist
            Zuletzt geändert von Arni; 22.07.2005, 14:09.
            Bei Risiken und Nebenwirkungen fragen Sie Dr.Alban

            Kommentar


            • #7
              Die daten werden in der tabelle weiterhin benötigt, damit der user sich wieder einloggen kann.

              Kommentar


              • #8
                Original geschrieben von timo75
                Die daten werden in der tabelle weiterhin benötigt, damit der user sich wieder einloggen kann.
                und wie soll das bitte gehen, da er doch jedesmal eine neue SessionID bekommt, das geht nicht so wie Du dir das denkst, Seite neu aufrufen, ergibt auch jedesmal eine neue SessionID
                Bei Risiken und Nebenwirkungen fragen Sie Dr.Alban

                Kommentar


                • #9
                  Original geschrieben von Arni
                  und wie soll das bitte gehen, da er doch jedesmal eine neue SessionID bekommt, das geht nicht so wie Du dir das denkst, Seite neu aufrufen, ergibt auch jedesmal eine neue SessionID
                  Der User registriert sich. Seine Daten (User, Passwort, Email etc.) Werden in die datenbank geschrieben.
                  Loggt er sich dann ein wird seine sessionid in die DB geschrieben und auf jeder geschützten seite wird seine sessionid mit der in der DB vergleichen.

                  Stimmt die sessionID nicht bekommt er den loginscreen.

                  €: Es klappt ja auch alles bis ich die scripte als Frame in die Seite einbinde.
                  Dann bekomm ich das komische Phänomen wie oben beschrieben.

                  Kommentar


                  • #10
                    Allerdings wenn ich den Browser schliesse ohne mich vorher über den link
                    ausgeloggt zu haben hab ich trotz erneutem login über die login.php
                    keinerlei chance auf meine geschützten seiten zu gelangen.
                    ER sagt mir immer wieder "Sie sind nicht eingeloggt".
                    Ich sagte doch , das geht nicht, zumindest nicht so wie Du es oben schreibst
                    Bei Risiken und Nebenwirkungen fragen Sie Dr.Alban

                    Kommentar


                    • #11
                      Original geschrieben von Arni
                      Ich sagte doch , das geht nicht, zumindest nicht so wie Du es oben schreibst
                      Und warum nicht? Wenn ich weiss warum würde es mir sicher leichter fallen ne andere Lösung zu finden.

                      Kommentar


                      • #12
                        Das habe ich Dir bereits oben geschrieben

                        Seite schliessen und dann
                        Seite neu aufrufen, ergibt auch jedesmal eine neue SessionID


                        Sag mal liest Du nicht was man schreibt ??
                        Zuletzt geändert von Arni; 22.07.2005, 14:30.
                        Bei Risiken und Nebenwirkungen fragen Sie Dr.Alban

                        Kommentar


                        • #13
                          Ich würde in deiner Login-Funktion noch
                          PHP-Code:
                           session_regenerate_id() 
                          einfügen, so stellst du sicher das bei jedem einloggen auch wirklich ne neue SessionID entsteht.

                          @Arni: Die alte SessionID wird beim ausloggen auf NULL gesetzt und für ein erneutes einloggen ist dann ein passender Username und Passwort von Nöten.
                          Ist der User erstmal erfolgreich eingeloggt bleibt er dies, solange die beim einloggen gespeicherte SessionID gleich bleibt.

                          @timo75: Überprüfst du in jedem Frame ob User eingeloggt oder nicht,
                          oder machst du das einmal im Frameset?

                          Kommentar


                          • #14
                            OK ich versuchs nochmal genauer zu erklären:

                            1. Situation

                            - einloggen. Daten werden mit DB verglichen und SessionID in DB geschrieben.
                            - SessionID bleibt gleich. Alle unterseiten sind erreichbar.
                            - Ausloggen über den Logout-link. SessionID wird aus der DB entfernt.
                            - Browser schliessen.
                            - Browser öffnen.
                            - neu einloggen. Neue SessionID in DB. Alle unterseiten über Headerframe erreichbar.

                            Funktioniert

                            2. Situation

                            - einloggen. Daten werden mit DB verglichen und SessionID in DB geschrieben.
                            - SessionID bleibt gleich. Alle unterseiten sind erreichbar.
                            - Diesmal NICHT Logut-Link betätigen!!!
                            - Browser schliessen.
                            - Browser öffnen.
                            - neu einloggen. Neue SessionID in DB. Alle unterseiten nicht mehr über den Headerframe erreichbar da er bei jedem Klick ne neue SessionID vergibt.

                            Funktioniert nicht.

                            Kommentar


                            • #15
                              Original geschrieben von ExInfernis
                              Ich würde in deiner Login-Funktion noch
                              PHP-Code:
                               session_regenerate_id() 
                              einfügen, so stellst du sicher das bei jedem einloggen auch wirklich ne neue SessionID entsteht.

                              @timo75: Überprüfst du in jedem Frame ob User eingeloggt oder nicht,
                              oder machst du das einmal im Frameset?
                              ICh überprüfe das bei allen Unterseiten und beim login. Beim Headerframe nicht da dort eigentlich nur die navigation ist.

                              Kommentar

                              Lädt...
                              X