Wie kann ich die Authentifizierung eines Benutzers in PHP / MySQL?
Also vor kurzem habe ich gelernt, wie man richtig fügen Sie einen Benutzernamen und ein Passwort zu einer Datenbank.
Meine Datenbank ist usersys, und die Tabelle speichern von Benutzerinformationen aufgerufen wird, enthalten. Die Tabelle hat zwei Spalten - Benutzername (primär), Passwort.
Anmeldeformular funktioniert Super, betritt der Benutzer die Eingabe in der Datenbank korrekt und auch überprüft, ob der Benutzername bereits in der Datenbank befindet oder nicht.
Mit dieser sagte, ich bin gefragt, wenn jemand könnte mir helfen, erstellen Sie ein login-Skript. So weit, dies ist, was ich habe:
$username = $_POST['username'];
$password = $_POST['password'];
$displayname = $_POST['username'];
$displayname = strtolower($displayname);
$displayname = ucfirst($displayname);
echo "Your username: " . $displayname . "<br />";
mysql_connect("localhost", "root", "******") or die(mysql_error());
echo "Connected to MySQL<br />";
mysql_select_db("usersys") or die(mysql_error());
echo "Connected to Database <br />";
$lcusername = strtolower($username);
$esclcusername = mysql_real_escape_string($lcusername);
$escpassword = mysql_real_escape_string($password);
$result = mysql_query("SELECT * FROM userdb WHERE username='$esclcusername' AND password='$escpassword'") or die(mysql_error());
$row = mysql_fetch_array( $result );
$validateUser = $row['username'];
$validatePass = $row['password'];
Den POST-Daten aus der vorherigen log-in-Seite. Ich möchte dieses script zum überprüfen der Tabelle (userdb) und suchen Sie die Zeile für den Benutzernamen, den der Benutzer eingegeben, von der bisherigen form und stellen Sie sicher, dass das eingegebene Kennwort entspricht dem Benutzernamen das Kennwort legen Sie in dieser Zeile, in der userdb-Tabelle.
Ich will auch irgendeine Art von Weg, um zu überprüfen, ob oder nicht, wenn der username existiert, um dem Benutzer mitzuteilen, dass der Benutzername eingegeben, die nicht existiert, wenn es nicht gefunden in der Tabelle.
- Sie sollten re-benutzen Sie einen bestehenden authentication framework, Wann immer möglich, weil, wirklich, es ist Komplex. Zum Beispiel, nehmen Sie einen Blick an github.com/delight-im/PHP-Auth, die sowohl Rahmen-als-Agnostiker und Datenbank-agnostisch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist keine direkte Antwort auf diese Frage, aber ein GUTER Mehrwert.
Sie sollten die Verwendung von MYSQL SHA1-Funktion, um das Kennwort zu verschlüsseln, bevor die Speicherung in der Datenbank.
$pwd = "1) OR ( 1 = 1 "
Können Sie sessions verwenden. Sitzungen sind Globale Variablen, wenn es gesetzt ist, bleiben mit dem der Benutzer, während er surft durch die site.
Da Sie lernen, PHP, probieren Sie dieses tutorial auf der offiziellen website.
Aber was würden Sie tun, in der Theorie ist wenn der Benutzername und das Kennwort übereinstimmen, setzen Sie eine session-variable
Tun, und dann wird überprüft, ob der Benutzer authentifiziert ist.
Einen Weg, es zu tun (DISCLAIMER: nicht unbedingt best-practice):
... und auf Seiten, die eine Authentifizierung erfordern:
Lesen Sie mehr über PHP Sitzungen.
Ich mag beide
$_SESSION
undMYSQL
Prüft bei jedem login POST. Dies sollte helfen, ein paar Dinge begonnen.HINWEIS: Sie benötigen würden, um starten Sie die Seite Datei mit
session_start()
und erstellen Sie eine separate Sitzung zu Überprüfen sind Angabe mitsession_start()
und dann Ihre Progressionen z.B.if($_SESSION[valid_user] != $userid)
etwas tun.Sie könnten eine select-Anweisung zum abrufen von MySQL das Passwort für den angegebenen Benutzernamen. Wenn Sie ein leeres ResultSet, dann müssen Sie nicht den Benutzernamen in der Tabelle.
Wenn Sie den Benutzer authentifiziert werden, die in mehr als einer php-Seite, dann eine Wahl sollte sein, die Verwendung von Sitzungen (http://www.php.net/manual/en/function.session-start.php).
Auch, denke ich, sollten Sie sich Gedanken über die Sicherheit, d.h. die Verhinderung von SQL-injection:
und die Vermeidung von "sterben" (Behandlung von Fehlern und wiederkehrender Benutzer-freundliche Nachrichten aus dem Skript).
Ich würde auch darüber nachdenken, nicht die Speicherung der Passwörter in Ihrer Datenbank. One-way-hashes, die mit MD5 oder SHA1 sind eine Möglichkeit, hinzufügen von eine Schicht von Sicherheit auf der db Ebene.
Sehen http://php.net/md5 oder http://php.net/sha1 für weitere Informationen.
Ich Stimme mit der Idee, wenn die Verwendung von SESSION-Variablen, während die Authentifizierung des Benutzers.
Der einfache Weg, um den Benutzer zu authentifizieren ist wie folgt
$password = "1OR1=1"