In diesem Tutorial zeige ich euch, wie ihr einen modernen Login erstellt, auf Basis von Sessions, HTML5 und Prepared-Statements für gute Sicherheit. Ich übernehme allerdings keine Haftung für Schäden, Fehlfunktionen oder dergleichen!
Was wird benötigt?
- PHP 5.2.x fähiger Web-Server (getestet mit PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6)
- MySQLi 5.1 Datenbank (getestet mit MySQL 5.5 und MySQL 5.6)
Schritt 1/4 - Datenbank einrichten
Führe bitte folgenden SQL-Befehl in einer bereits existierenden Datenbank aus, um eine neue Tabelle namens user anzulegen.
Nun habt ihr eine neue Tabelle die den Namen user trägt. Ein Beispieldatensatz ist ebenfalls schon eingetragen, der beliebig geändert werden kann. Das Kennwort wäre test.
Schritt 2/4 - Die config.php
In der config.php tragen wir nun die Zugangsdaten zur Datenbank ein. In dieser Datei regeln wir die Datenbank-Verbindung und die Fehlerbehandlung, falls welche auftreten sollten. Die Datei sieht wie folgt aus:
<?php
/*
* Autor : Dennis1993
* Copyright : (c) 2011 by Dennis1993
*/
defined('SECURE') or die('Der direkte Zugriff auf diese Datei ist nicht erlaubt!');
if(mysqli_connect_errno() != 0 || !$SQL->set_charset('utf8'))
{
die('<strong>ERROR:</strong> Es konnte keine Verbindung mit dem Datenbank-Server hergestellt werden!');
}
?>
Schritt 3/4 - Die login.php
In dieser Datei befindet sich die Logik des Systems, dass heißt, hierüber steuert das Script, ob der Benutzer die richtigen Daten angegeben hat und prüft diese in der Datenbank ab. Ist alles ok, setzt das Script eine Session und leitet den Benutzer auf die intern.php weiter. Außerdem wird hier auch der Logout geregelt, den man erst nach dem erfolgreichen Login durchführen kann.
Diese Datei hat im Grunde kaum eine Wirkung. Sie soll nur zeigen, wie man prüfen kann, ob ein Benutzer angemeldet ist oder nicht. Ferner kann man sich hier noch abmelden. Die Datei sieht wie folgt aus:
Ist die Funktion filter_var() nicht erst ab 5.3 dabei?
Muss ich gleich nochmal schauen.
[color=red]Edit: Alles klar, Fehler meinerseits. Die Filter-Funktion gibt es doch schon seit 5.2 ( http://de2.php.net/filter_var ) Habe ich oben geändert, danke!
Empfehlen tue ich dann aber 5.3, damit es doch noch einen Zweck hat [/color]
Post wurde schon 2x editiert, das letzte mal am 23.04.2011 um 22:44 von
ich setzte das Script von Dir ein und bin begeistert.
Jetzt habe ich allerdings noch eine Frage:
Ich könnte schwören, dass ich mich zumindest beim IE nach dem Schließen und wieder neu Öffnen des Browsersmich nicht erneut anmelden musste, sondern erst dann, wenn ich mich zuvor über Logout abgemeldet habe. Seit heute ist das anders (habe auf dem Webspace mit der PHP Version experementiert).
Schließe ich das Browserfenster und öffne es gleich wieder, muss ich mich erneut anmelden um auf die Seiten zu gelangen.
Frage: Wie ist das ursprünglich von Dir vorgesehen bzw. wann sollte eine neue Anmeldung erforderlich werden?
1.) Schon beim Schließen des Browserfensters?
2.) Auch schon dann, wenn ich aus dem geöffneten Browserfenster eine andere Seite aufrufe und dann wieder auf meine Seite zurückkehre?
3.) Wie verhält es sich darüber hinaus, wenn ich aus dem geöffneten Browserfenster alles lösche (Cookies, Temporäre Dateien etc.)?
Ich würde gerne mal prüfen ob alles korrekt läuft.
Vielen Dank für Deine Unterstützung.
09.05.2011, 21:53
DingsDaBums
Mitglied
Exzellenter User
Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2496
ich setzte das Script von Dir ein und bin begeistert.
Jetzt habe ich allerdings noch eine Frage:
Ich könnte schwören, dass ich mich zumindest beim IE nach dem Schließen und wieder neu Öffnen des Browsersmich nicht erneut anmelden musste, sondern erst dann, wenn ich mich zuvor über Logout abgemeldet habe. Seit heute ist das anders (habe auf dem Webspace mit der PHP Version experementiert).
Schließe ich das Browserfenster und öffne es gleich wieder, muss ich mich erneut anmelden um auf die Seiten zu gelangen.
Frage: Wie ist das ursprünglich von Dir vorgesehen bzw. wann sollte eine neue Anmeldung erforderlich werden?
1.) Schon beim Schließen des Browserfensters?
2.) Auch schon dann, wenn ich aus dem geöffneten Browserfenster eine andere Seite aufrufe und dann wieder auf meine Seite zurückkehre?
3.) Wie verhält es sich darüber hinaus, wenn ich aus dem geöffneten Browserfenster alles lösche (Cookies, Temporäre Dateien etc.)?
Ich würde gerne mal prüfen ob alles korrekt läuft.
Vielen Dank für Deine Unterstützung.
Das kommt oft auf die PHP Einstellungen auf dem Server an.
Da das ganze über eine Session gehalten wird, muss man sich erst neu anmelden, wenn man den Broser geschlossen hat oder eben auf "Abmelden" gedrückt hat.
Man kann, wenn man angemeldet ist, auch das login.php-Script nochmal aufrufen um sich mit einem anderen Account anzumelden. Wenn man das nicht tut, bleibt man aber mit dem alten Account angemeldet.
Also: Browser schleißen => Neue Anmeldung erforderlich
"Abmelden-Button" => Neue Anmeldung
Sonst bleibt man angemeldet.
nein, login.php ist schon richtig in der Form, weil sich das Script in der login.php selbst befindet.
In Zeile 49 wird der Benutzer automatisch auf die intern.php weitergeleitet, wenn der Login korrekt war.
ah ok, gut besten dank für die auskunft..
leider funktioniert es bei mir nicht richtig. 1-2 mal konnte ich mich einloggen aber meistens nicht oder dann kommt anschliessend nur ne weisse seite (darum dachte ich die weiterleitung an intern.php) funktioniert nicht....
ich logge mich ein ich werde weitergeleitet an eine komplett weisse seite und oben in der url steht immer noch www.xxx.com/login.php
es scheint also das die weiterleitung an intern.php nicht funktioniert.
die anmeldung hat aber eigentlich funktioniert denn ich kann im browser anschliessend direkt via url auf www.xxx.com/intern.php zugreiffen was ansonsten ja nicht funktionieren würde...
Sonst probiert mal folgendes: Öffne bitte die config.php und ändere Zeile 22
PHP
1:
ini_set('display_errors', false);
wie folgt ab
PHP
1:
ini_set('display_errors', true);
Dann führe nochmals einen Login durch. Nun sollte die weiße Seite Fehlermeldungen zeigen.
Die kannst du hier mal posten oder selbst beheben, wenn du weißt woran es liegt
Post wurde schon 2x editiert, das letzte mal am 26.10.2011 um 16:06 von
Orginal von Dennis1993
Dann führe nochmals einen Login durch. Nun sollte die weiße Seite Fehlermeldungen zeigen.
Die kannst du hier mal posten
ok habe deinen rat befolgt und hier die meldung:
Zitat:
Warning: Cannot modify header information - headers already sent by
(output started at
/home/xxx/public_html/config.php:32) in /home/xxx/public_html/login.php on line 45
26.10.2011, 16:11
beatles
Mitglied
Gruenling
Dabei seit: 24.08.2011
Herkunft: Schweiz
Posts: 13
so habe bemerkt dass ich ja hier einmal einen Account angelegt habe :-) also ich bin der Gast mit dem Problem was oben beschrieben ist...
Hier nochmals schöner dargestellt:
PHP
1:
Warning: Cannot modify header information - headers already sent by (output started at /home/xxx/public_html/config.php:32) in /home/xxx/public_html/login.php on line 45
Ich brauche hierzu Hilfe....
Er kann die Session nicht im header von intern.php eintragen??
Hast du irgendwo ein Leerzeichen vorher ausgegeben?
Die Fehlermeldung sagt nämlich aus, dass er die Session nicht starten kann, da schon eine Ausgabe getätigt wurde.
Um es beeser zu verdeutlichen: Du kannst schlecht in einen Bus einsteigen, wenn er schon abgefahren ist.
Prüfe mal, ob do irgendwo vor/über session_start() eine Leerzeile/Leerzeichen ist. Das muss dann nämlich weg. Als erstes muss nämlich session_start() kommen und dann erst der Rest.
hmm ich habe nochmals alle drei dateien direkt vom tutorial kopiert und so übernommen...
(db infos habe ich natürlich verändert)
aber es erscheint immer noch die gleiche meldung wobei sich der fehler in der zeile verschoben hat von 45 -> 49:
PHP
1:
Warning: Cannot modify header information - headers already sent by (output started at /home/xxx/public_html/config.php:35) in /home/xxx/public_html/login.php on line 49
Post wurde schon 1x editiert, das letzte mal am 26.10.2011 um 17:35 von beatles
Ich habe mir das Tutorial gerade selbst noch einmal durchgeführt und bei mir läuft es problemlos. Habe dir meine Dateien einfach mal angehangen. Bitte mal ALLE Dateien ersetzen und die Zugangsdaten in der Config entsprechend anpassen.