Erstes Login mit Session

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

  • #16
    Was machst Du da?

    Du fragst mit if isset $_SESSION['loggedin']
    zuerst ab ob man eingeloggt ist und prüfst erst
    danach ob User und PW in der Datenbank stehn?????

    Beziehungsweise fragst Du ja nicht mal den Status ab
    sondern nur ob die Variable deklariert ist...

    Also:

    - Session starten
    - abfragen ob $_SESSION['loggedin'] == "ok" ist
    - wenn nicht, Formualr anzeigen, User und PW prüfen
    - wenn nicht ok ->Fehlermeldung
    - wenn ok -> Variable setzen
    und weiter mit Begrüßungstext

    beim Ausloggen:
    - von mir aus den Zeitpunkt in der Datenbank speichern
    (das mit Deinem $_SESSION['lastvisit'] geht so nicht.
    - alle Sessiondaten löschen mit $_SESSION="";
    - $_SESSION['loggedin'] = "notok";
    - weiterleiten mit header Location (Rausschmiß)
    und exit

    Kommentar


    • #17
      Hä? Die Datei, die das Login verarbeitet fragt natürlich ab, ob das PW richtig ist und erstellt dann die Session. Hier ist die Isset abfrage nur noch um zu switchen zwischen dem Loginformular und der Statusanzeige
      -Am Anfang war das Wort-

      Ich habe fertig mit Abi ^^

      Kommentar


      • #18
        Du fragst in Deinem Script ab ob die Variable gesetzt ist
        und startest dann eine Datenbankabfrage ob Passwort
        und Username richtig sind.

        Sorry - aber so stehts in Deinem geposteten Script.

        Ich mach es jedenfalls so, daß ich die Daten des Users
        in die Session schreib wenn das Login erfolgreich war,
        in $_SESSION['userarray'] z.B.

        So kann ich jederzeit auf die Daten des Users zugreifen
        (ICQ-Nummer etc.).
        Zuletzt geändert von Koala; 09.06.2006, 19:37.

        Kommentar


        • #19
          Aber bei der zweiten Abfrage geht es generell nicht um das Passwort, sondern ich lese da nur andere Daten aus wie z.B. Registrierungsdatum usw. Aber ich habe es jetzt trotzdem mal geändert mit einem kleinen Unterschied:

          Ich zeige keine Fehlermeldung wenn das PW in der Session nicht richtig ist, sondern dann wird eben das Loginformular wieder angezeigt:

          PHP-Code:
          <?

          $sql_right_passwort="SELECT
                      passwort 
                       FROM 
                      users
                       WHERE 
                      username ='".mysql_real_escape_string
          ($_SESSION['username'])."'
                   AND
                      passwort ='".md5(mysql_real_escape_string
          ($_SESSION['logged_in']))."' ";

                   

          $result_sql_right_passwort = mysql_query($sql_right_passwort) OR die
          (mysql_error());
           
          $right_passwort = mysql_fetch_array($result_sql_right_passwort);

          if($_SESSION['logged_in'] == $right_passwort['passwort'])
              {
              $sql_infobox="SELECT
                                  username,
                          icq,
                          regdat 
                                  FROM 
                                  users
                                  WHERE 
                                  username ='".mysql_real_escape_string
          ($_SESSION['username'])."'
                              AND
                                  passwort ='".mysql_real_escape_string
          ($_SESSION['logged_in'])."' ";
                  
              $result_sql_infobox = mysql_query($sql_infobox) OR die
          (mysql_error());
              
              $infobox = mysql_fetch_array($result_sql_infobox);
                  
              echo "Willkommen, ".$infobox['username']."!<br/><br/>\n";
              echo "<table>";
              echo "    <tr>";
              echo "        <td>Du bist seid dem </td>";
              echo "        <td rowspan=\"2\"><img 
          src=\"http://web.icq.com/whitepages/online?icq=
          ".$infobox['icq']."&img=5\" /></td>";
              echo "    </tr>";
              echo "    <tr>";
              echo "        <td>".$infobox['regdat']." dabei!</td>";
              echo "    </tr>";
              echo "    <tr>";
              echo "        <td><br/></td>";
              echo "    </tr>";
              echo "    <tr>";
              echo "        <td>Dein letzter Besuch war am
           <b>".$_SESSION['last_visit']."</b>.</td>";
              echo "    </tr>";
              echo "</table>\n";
              echo "<a href=./index.php?connect=logout>Logout</a>";
              }
          else
              {
              echo "<form action=\"./index.php?
          site=login_begruessung&amp;connect=login\" method=\"post\">\n";
              echo "    <fieldset>\n";
              echo "        <legend><b>Login</b></legend>\n";

              echo "        <table cellpadding=\"3\" cellspacing=\"0\"
           border=\"0\">\n";
              echo "            <tr>\n";
              echo "                <td>Username</td>\n";
              echo "                <td><input
          type=\"text\" name=\"username\" size=\"9\" maxlength=\"20\" /></td>\n";
              echo "            </tr>\n";
              echo "            <tr>\n";
              echo "                <td>Passwort</td>\n";
              echo "                <td><input
           type=\"password\" name=\"passwort\" size=\"9\" /></td>\n";
              echo "            </tr>\n";
              echo "            <tr>\n";
              echo "                <td></td>\n";
              echo "                <td><input
           type=\"submit\" name=\"Send\" value=\"Login\" /></td>\n";
              echo "            </tr>\n";
              echo "        </table>\n";
              echo "    </fieldset>\n";
              echo "</form>\n";
              }
          ?>
          Besser?

          EDIT:
          Toll -.- jetzt funktioniert es nicht mehr -_____- vorher hats noch.
          Zuletzt geändert von Lexus_Ks; 09.06.2006, 19:44.
          -Am Anfang war das Wort-

          Ich habe fertig mit Abi ^^

          Kommentar


          • #20
            das ist nicht ok:

            if($_SESSION['logged_in']) == $right_passwort['passwort'])

            die Loggedin-Variable ist nur ein Merker und beinhaltet
            nur ob man eingeloggt ist oder nicht.

            login.php (ohne Formular)

            PHP-Code:
            <?php
            error_reporting
            (E_ALL);
            session_start();

            if (isset (
            $_SESSION['loggedin']) && $_SESSION['loggedin'] == "ok"// loggedin Variable vorhanden?
                    
            {
                    include (
            "allloggedin.php");   // Ausgabe daß man schon eingeloggt ist
                    
            exit;
                    }        

            include (
            "inc/config.php");

            $conn_id mysql_connect($HOST,$ID,$PW);
            if (!
            $conn_id
                {
                echo 
            "Keine Verbindung zur DB: ".mysql_error();
                exit;
                }
                
            if (!
            mysql_select_db($DB,$conn_id))
                {
                echo 
            "Kann ".$DB." nicht auswählen: ".mysql_error();
                exit;
                }

            $_SESSION['userarray'] = "";    // Array speichert alle Userdaten
            $_SESSION['loggedin'] = "";        // Variable prüft ob eingeloggt
            $_SESSION['from'] = "login";
            $user "";                        // damit im Inputfeld die Eingabe stehen bleibt
            $erg "";                        // die Variable für die Fehlerausgaben

            if (!isset ($_POST['User']) || !isset($_POST['Passwort']))    // keine Eingabe ?
                
            {
                
            $erg "Bitte geben Sie Ihre Daten ein!";
                }

            if (isset (
            $_POST['User']) && isset($_POST['Passwort']))    // Eingabe
                
            {
                
            $user $_POST['User'];
                
            $pass $_POST['Passwort'];
                
                
            // gleich am Anfang auf '"/ prüfen
                // wenn ungültige Zeichen -> Eingaben löschen 
                
                
            if (preg_match ('/[^\'"\/]{5,12}/'$user) == FALSE)
                    {
                    
            $user "";
                    
            $_POST['User'] = "";
                    unset (
            $_POST['User']);
                    
            $erg "Bitte geben Sie den Benutzernamen ein (mind. 5 Zeichen) !";
                    }
                elseif (
            preg_match ('/[^\'"\/]{5,12}/'$pass) == FALSE)
                    {
                    
            $pass "";
                    
            $_POST['PW'] = "";
                    unset (
            $_POST['PW']);
                    
            $erg "falsches Passwort !";
                    }
                else                                                    
            // Eingabe ok!
                    
            {
                    
            $sql "SELECT * FROM `user` WHERE User = '".$user."' AND PW = '".$pass."'";
                    
            $result mysql_query($sql);
                    if (!
            $result
                        {
                        echo 
            "Anfrage ($sql) konnte nicht ausgeführt werden : ".mysql_error();
                        exit;
                        }
                    if (
            mysql_num_rows($result) != 0)    // Datenbank liefert Ergebnis
                        
            {
                        
            $userarray mysql_fetch_assoc($result);
                        
                        
            // strcmp wegen Klein-/Großschreibung
                        
                        
            if  (strcmp ($user$userarray['User']) == && strcmp ($pass$userarray['PW']) == 0)
                            {
                            
            $_SESSION['loggedin'] = "ok";            // Login erfolgreich
                            
            header ("location: suche.php");
                            exit;
                            }
                        else
                            {
                            
            $erg "Bitte geben Sie die Daten erneut ein.";
                            }
                        }            
                    if (
            mysql_num_rows($result) == 0)                 // Login nicht ok!
                        
            {
                        
            $erg "Logindaten sind nicht korrekt.";
                        }
                    }
                }

            ?>

            logout.php:

            PHP-Code:
            <?php
            error_reporting
            (E_ALL);
            session_start();

            if (!isset (
            $_SESSION['loggedin']))        // loggedin Variable vorhanden?
                    
            {
                    
            $_SESSION['loggedin'] = "";
                    include (
            "loggedout.php");       // Anzeige: Sie sind ausgeloggt.
                    
            exit;
                    }        

            if (
            $_SESSION['loggedin'] != "ok")        // Login nicht ok?
                    
            {
                    
            $_SESSION['loggedin'] = "";
                    include (
            "loggedout.php");       // Anzeige: Sie sind ausgeloggt.
                    
            exit;
                    }
                    
            $_SESSION = array();

            // Falls die Session gelöscht werden soll, löschen Sie auch das
            // Session-Cookie.
            // Achtung: Damit wird die Session gelöscht, nicht nur die Session-Daten!
            if (isset($_COOKIE[session_name()])) {
                
            setcookie(session_name(), ''time()-42000'/');
            }

            // Zum Schluß, löschen der Session.
            session_destroy();
            ?>
            Zuletzt geändert von Koala; 09.06.2006, 19:56.

            Kommentar


            • #21
              Nein, die enthält das verschlüsselte Passwort ^^

              Aber er zeigt mir jetzt folgendes an:

              Notice: Undefined index: username in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/login_form.inc on line 8

              Notice: Undefined index: logged_in in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/login_form.inc on line 10

              Notice: Undefined index: logged_in in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/login_form.inc on line 18

              Notice: Undefined index: username in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/login_form.inc on line 27

              Notice: Undefined index: logged_in in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/login_form.inc on line 29
              Willkommen, !

              Du bist seid dem
              dabei!



              Notice: Undefined index: last_visit in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/login_form.inc on line 48
              Dein letzter Besuch war am .
              Logout
              Zuletzt geändert von Lexus_Ks; 09.06.2006, 19:52.
              -Am Anfang war das Wort-

              Ich habe fertig mit Abi ^^

              Kommentar


              • #22
                Ich kann die Session nicht erst in der login.php starten, weil ich alles include( also auch die dateien die nur für user zugängig sein sollen )und die werden ja erst im Body includet. Deswegen starte ich die Session gleich am Anfang der index.php, egal ob man eingloggt ist oder nicht.
                -Am Anfang war das Wort-

                Ich habe fertig mit Abi ^^

                Kommentar


                • #23
                  das ist auch ok, daß Du die Session gleich startest.

                  Aber so langsam hab ich den Eindruck, daß Du das Script gar nicht
                  selber geschrieben hast.

                  Du kannst nicht einfach ein Script irgendwoher nehmen,
                  an verschiedenen Stellen was ändern und dann erwarten
                  daß jemand anders das Script wieder repariert.

                  Ich kann Dir nur den groben Ablauf bei nem Loginsystem
                  mit Sessions sagen.

                  was für einen Sinn macht es eigentlich das PW in der Session zu speichern?
                  Zuletzt geändert von Koala; 09.06.2006, 20:04.

                  Kommentar


                  • #24
                    Original geschrieben von Koala



                    logout.php:

                    PHP-Code:
                    <?php
                    error_reporting
                    (E_ALL);
                    session_start();//ist ja schon gesartet

                    if (!isset ($_SESSION['loggedin']))        // loggedin Variable vorhanden?
                            
                    {
                            
                    $_SESSION['loggedin'] = "";
                            include (
                    "loggedout.php");       // Wenn ich das HIER include wird es ja über dem Header angezeigt??Denn ich muss die login
                     
                    php ja über dem header positionierenweil ich sonst keine session starten kann
                            
                    exit;
                            }        

                    if (
                    $_SESSION['loggedin'] != "ok")        
                            {
                            
                    $_SESSION['loggedin'] = "";
                            include (
                    "loggedout.php");       // Hier das gleiche
                     
                    Problem
                            
                    exit;
                            }
                            
                    $_SESSION = array();

                    // Falls die Session gelöscht werden soll, löschen Sie auch das
                    // Session-Cookie.
                    // Achtung: Damit wird die Session gelöscht, nicht nur die Session-Daten!
                    if (isset($_COOKIE[session_name()])) {
                        
                    setcookie(session_name(), ''time()-42000'/');
                    }

                    // Zum Schluß, löschen der Session.
                    session_destroy();
                    ?>
                    -Am Anfang war das Wort-

                    Ich habe fertig mit Abi ^^

                    Kommentar


                    • #25
                      HALLO ?? Natrülich habe ich das selbst geschrieben !!!! Das ist ja der HAmmer

                      Fakt ist dass es eben noch funktioniert hat und jetzt nicht mehr. Im übrgen war das alles keine Hilfe für MEIN PROBLEM.

                      Vielelicht hast du mein Script nicht verstanden, weil ich SESSION variablen anders deklariert habe als du sie verstanden hast.

                      Das Passwort speichere ich i nder Session, damit ich nicht überall ne SQL abfrage starten muss um das erstmal rauszufinden.
                      Zuletzt geändert von Lexus_Ks; 09.06.2006, 20:06.
                      -Am Anfang war das Wort-

                      Ich habe fertig mit Abi ^^

                      Kommentar


                      • #26
                        Sorry - dann nehm ich das zurück. Sah so aus.

                        mein logout-Script funktioniert,
                        natürlich kann ich nach Sessionstart irgendwas includen,
                        wieso denn nicht?
                        Da hat doch nix mit Header zu tun.
                        Zuletzt geändert von Koala; 09.06.2006, 20:07.

                        Kommentar


                        • #27
                          Okay, sorry auch für meine Reaktion. Willst mir ja nur helfen. Ich habe unwahrscheinlich Probleme diese Sessionsache richtig umzusetzen und habe mir dann den Code so umgelegt, wie es meiner Logik entsprach und wie es funktioniert hat. Das entspricht wahrscheinlich nicht den Standarts, die man so kennt, was wahrscheinlich für deine Verwirrung gesorgt hat.

                          Warum ich da nichts includen kann? Wenn ich da was include steht es über meine mheader, weil ich die login.php ja vor dem header include.
                          -Am Anfang war das Wort-

                          Ich habe fertig mit Abi ^^

                          Kommentar


                          • #28
                            ok - die Nerven sind beruhigt - lol.

                            Dann noch mal:

                            Du kannst doch schreiben:

                            login.php:

                            PHP-Code:
                            error_reporting(E_ALL);
                            session_start();

                            if (isset (
                            $_SESSION['loggedin']) && $_SESSION['loggedin'] == "ok")    
                                    {
                                    include (
                            "allloggedin.php");   // Ausgabe daß man schon eingeloggt ist
                                    
                            exit;
                                    }
                            echo 
                            '<html><head><meta....</head><body>....';


                            und in der allogedin.php:

                            echo 
                            '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                            "http://www.w3.org/TR/html4/loose.dtd">
                            <html>
                            <head>
                            <title>Untitled Document</title>
                            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                            </head>

                            <body>
                            Sie sind eingeloggt!
                            </body>
                            </html>'

                            Kommentar


                            • #29
                              Hast du ICQ oder MSN? Es gibt da ein Missverständnis. Vielleicht kann ich es dir erklären, denn ich habe gerade einen Fehler (der führt nicht dazu dass es nicht funktioniert, macht aber alles viel schwerer) entdeckt den ich jetzt erstmal ausmertzen muss. Dann könnte ich dich danach evtl dort kontaktieren. Ich habe meine MSN und ICQ Daten im Profil angegeben.
                              -Am Anfang war das Wort-

                              Ich habe fertig mit Abi ^^

                              Kommentar


                              • #30
                                Warum schickst du den Header eigentlich hier nochmal?
                                PHP-Code:
                                echo '<html><head><meta....</head><body>....'
                                Den sende ich doch schon in der index.php??
                                Und wenn ich die login.php unter dem Header (im Body) include, dann kann ich doch nicht nochmal nen head senden, oder??
                                -Am Anfang war das Wort-

                                Ich habe fertig mit Abi ^^

                                Kommentar

                                Lädt...
                                X