frage zu PHP-Sessions



  • Habe mich mal ein wenig damit beschäftigt, da ich eine mysql datenbank anwendung in Verbindung mit PHP habe, und dieses über ein Login-System steuern möchte.

    Dazu verwenden will ich die PHP-Session, und habe eigentlich auch schon geschafft was ich wollte,nur sieht man das ein bissl zu "einfach" aus, und ich wollte mal fragen ob da jetzt noch irgendwas fehlt, oder alles stimmt, oder wie !?

    hier mal meine login.php - ist denke ich selbterklärend:

    <?
    
    require "dbconnect.php";
    connectToMyDatabase();
    ?>
    <html>
        <head>
            <title>...please log in !!!</title>
        </head>
        <body>
    
     <form method="POST" action="<?=$PHP_SELF; ?>">
      <p>user:
      <input type="text" name="userName" size="20"></p>
      <p>password:
      <input type="password" name="password" size="20"></p>
      <p><input type="submit" value="senden" name="send"></p>
    </form>
    
    <?
    
    $userName = $_POST['userName'];
    $password = $_POST['password'];
    
    $query = "SELECT  user_name, password
    FROM  vm_user
    WHERE user_name = '$userName'";
    
    $result=mysql_query($query);
    while ($daten=mysql_fetch_array($result, MYSQL_ASSOC))
    {
    	  $user = "$daten[user_name]";
    	  $pw = "$daten[password]";
    }
    
    if (isset($_POST['password'])) {
    
    						if(("$user" == "$userName") && ("$pw" == "$password")) {
    							session_start();
    							$_SESSION["user"] = $_POST['userName'];
    							header("LOCATION: vinyl_own.php?".strip_tags(SID) );		
    						}
    						else
    
    							header("LOCATION: login_failt.php");
    
    }
    
    ?>
    
    </body>
    </html>
    

    und in den anderen, nächsten dateien mache ich nur n session_start() und hole mir den gespeicherten namen mit

    $user = $_SESSION["user"];

    und die $user nehme ich dann für die datenbankbefehle als usernamen halt, wo entsprechende db-einträge editiert oder gelöscht werden können und so.

    mehr ist das nicht, und das is so ein korrektes login system ? Oder muss ich doch noch irgendwo was vergleichen oder so.

    zu der datei oben habe ich auch eine frage noch:

    die variablen $user und $password kann er ja erst korrekt belegen,wenn das formular abgeschickt wird, und dann macht er mit den variablen noch die db-abfrage um die die daten für den vergleich zu bekommen ? Ich meine,es geht ja,verstehe nur nicht ganz warum, weil die variablen ja erst belegt werden können,wenn das formular abgeschickt wird !?



  • Naja, besonders schön und sicher ist der Code noch nicht:
    - Du verwendest die Eingaben aus dem Formular direkt in deinem SQL-Query (Stichwort: SQL-Injections) -> mysql_escape_string()
    - Du liest die Ergebnisse in eine while-Schleife aus - kann es mehrere User mit dem selber Username geben?
    - "$daten[user_name]" -> $daten['user_name'] (generell brauchst du nicht um deine ganzen Variablennamen "" außenrum machen 😉
    - Je nach dem, wie sicher es sein soll: normalerweise speichert man die Passwörter in der DB nicht im Klartext, sonder z.B. md5 codiert. Zum Vergleich dann das eingegebene Passwort ebenfalls md5 codieren und mit dem aus der DB vergleichen



  • Und das Passwort kann man auch gleich von der DB überprüfen lassen.

    where user = X and password = XX

    Durch den MD5 umgeht man auch noch eine SQL-Inj. beim Password.


Anmelden zum Antworten