Loginscript mit Sessions & Dateien

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Loginscript mit Sessions & Dateien

    Hallo, in diesem Tutorial wird gezeigt, wie man mit PHP ein kleines & aber dennoch schon sicheres Loginscript mit Sessions & Dateien schreibt. Viel Spaß!

    Zuerst einmal benötigen wir eine Seite wo wir uns "eintragen" können. Diese Datei nennen wir einfach mal eintragen.html:

    Quellcode

    1. <form action="eintragen.php" method="post"> Dein Username:<br> <input type="text" size="24" maxlength="50" name="username"><br><br> Dein Passwort:<br> <input type="password" size="24" maxlength="50" name="passwort"><br> Passwort wiederholen:<br> <input type="password" size="24" maxlength="50" name="passwort2"><br> <input type="submit" value="Abschicken"> </form>



    Dann kommt die .php Datei mit der die Abspeicherung der Daten in einer user.txt getan wird. Diese Datei nennen wir einfach mal eintragen.php:

    PHP-Quellcode

    1. <?php
    2. $username = $_POST["username"];
    3. $password = $_POST["passwort"];
    4. $password2 = $_POST["passwort2"];
    5. if ($password == $password2)
    6. {
    7. $user_vorhanden = array();
    8. $passwort = md5($password);
    9. $userdatei = fopen ("user.txt","r");
    10. while (!feof($userdatei))
    11. {
    12. $zeile = fgets($userdatei,500);
    13. $userdata = explode("|", $zeile);
    14. array_push ($user_vorhanden,$userdata[0]);
    15. }
    16. fclose($userdatei);
    17. if (in_array($username,$user_vorhanden))
    18. {
    19. echo "Username schon vorhanden <br> <a href=\"eintragen.html\">zurück</a>";
    20. }
    21. else
    22. {
    23. $userdatei = fopen ("user.txt","a");
    24. fwrite($userdatei, $username);
    25. fwrite($userdatei, "|");
    26. fwrite($userdatei, $passwort);
    27. fwrite($userdatei, "\n");
    28. fclose($userdatei);
    29. echo "$username, deine Anmeldung war erfolgreich<br><a href=\"login.html\">zum Login</a>";
    30. }
    31. }
    32. else
    33. {
    34. echo "Die Passwörter sind nicht identisch<br> <a href=\"eintragen.html\">zurück</a> ";
    35. }
    36. ?>
    Alles anzeigen


    Dann benötigen wir noch eine Art "Login-Page", diese nennen wir login.html:

    Quellcode

    1. <form action="login.php" method="post"> Dein Username:<br> <input type="text" size="24" maxlength="50" name="username"><br><br> Dein Passwort:<br> <input type="password" size="24" maxlength="50" name="password"><br> <input type="submit" value="Login"> </form>



    Auch dazu benötigen wir wieder eine .php Datei um die Daten abzufragen, diese nennen wir login.php:

    PHP-Quellcode

    1. <?php
    2. $username = $_POST["username"];
    3. $passwort = $_POST["password"];
    4. $passwort = md5($passwort);
    5. $log=0;
    6. $userdatei = fopen ("user.txt","r");
    7. while (!feof($userdatei))
    8. {
    9. $zeile = fgets($userdatei,500);
    10. $userdata = explode("|", $zeile);
    11. if ($userdata[0]==$username and $passwort==trim($userdata[1]))
    12. {
    13. $_SESSION['username'] = $username;
    14. echo "Login war erfolgreich. <a href=\"geheim.php\">Geschützer Bereich</a>";
    15. $log = 1;
    16. }
    17. }
    18. fclose($userdatei);
    19. if ($log==0)
    20. {
    21. echo "Zugriff verweigert <a href=\"login.html\">Zurück</a>";
    22. }
    23. ?>
    Alles anzeigen


    Anstatt nur Hallo $username registieren wir hier die Session username. Außerdem bekommt geben wir noch einen Link zum geschützen Bereich (geheim.php) aus.

    Und so sieht der geschütze Bereich (geheim.php) aus:

    PHP-Quellcode

    1. <?php
    2. session_start();
    3. if(!isset($_SESSION['username']))
    4. {
    5. echo "Bitte erst <a href=\"login.html\">einloggen</a>";
    6. exit;
    7. }
    8. ?>
    9. <html>
    10. Herzlich Willkommen im geschützen Bereich
    11. </html>
    Alles anzeigen


    Alle geschützen Dateien müssen so aussehen, wie die ersten paar Zeilen von geheim.php.

    Falls ihr noch nicht die Version 4.1.0 benutzt, und somit der Script nicht funktioniert müsst ihr anstatt $_POST => $HTTP_POST_VARS schreiben und anstatt $_SESSION => $HTTP_SESSION_VARS

    Screenshots:
    [Blockierte Grafik: http://s14.directupload.net/images/111212/qjvjlzto.png] [Blockierte Grafik: http://screeny.secure-dev.de/rhQhktUp0HjOxx0M7.png] [Blockierte Grafik: http://screeny.secure-dev.de/jQRKaFna5UBa4keBJ.png] [Blockierte Grafik: http://screeny.secure-dev.de/247rvxR2dAo2ZzXT8.png]

    Ich hoffe euch hat das Tutorial ein wenig geholfen, mit freundlichen Grüßen
    Numex


    /edit: Fehler korrigiert
    /edit2: PHP-Tag bei login.php vergessen
    /edit3: Screenshots beigefügt

    Quelle: php-einfach.de

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Numex ()

  • Bitte die Quellenangabe einfügen.

    Ich finde diesen "Loginscripting" eigentlich nicht so gut, da die Daten in einem Textdokument gespeichert werden, es ist zwar dann besser für ein UCP gedacht der auf Dini bassiert, aber naja, ich würde dafür dennoch lieber MySQL nehmen.
    Aber nun gut, es ist nützlich und auch okey.


  • Ob man nun MySQL oder Dateien verwendet ist im Grunde egal, was entscheidet ist der Hash-Algorithmus (fälschlicherweise oftmals auch Verschlüsselung genannt). Da man den Zugriff von außen auf die Textdateien verbietet ist das sogar sicherer, da mit diesem Verfahren eine absolute Sicherheit geboten wird, an die MySQL oder andere Datenbanksysteme nie rankommen werden und können - alles was einen Server benötigt ist und bleibt angreifbar.

    Zum Tutorial:
    Mir fehlt die Erklärung. Du gibst dem Leser über jedem Codeabschnitt eine kleine Information was er macht, aber das war es. Ich würde Kommentare innerhalb des Codes begrüßen, in denen du die einzelnen Funktionen und Variablen knapp erklärst bzw. deren Funktion erläuterst.

    Ein kleiner letzter Tipp am Rande: Nutze file_get_contents() und file_put_contents(). Sie sind schneller und verbrauchen weniger Leistung, haben also rundum mehr Performance.

  • @dead:

    mit der Sicherheit hast du schon recht aber eine Datenbank ist unter gleichen Vorraussetzungen viel performanter. Und wenn du nur wenige User hast mag das mit Textdateien noch funktionieren. Nur Loginsysteme haben die unangenehme Eigenschaft das da zur Gesamtlaufzeit verglichen ein sehr hohes Userwachstum herrscht.
    [tabmenu]
    [tab='Werbung in eigener Sache']
    Du suchst einen Instant Messenger dessen Verbindung voll verschlüsselt ist? Weiterhin soll er mit anderen Instant Massenging Protokollen verknüpfbar sein? Außerdem möchtest du weltweit erreichbar sein (ähnlich icq und msn)? - Dann schick mir Post und erhalte ein unverbindliches, auf alle Fälle kostenloses, Angebot:
    [Blockierte Grafik: http://easy-scripting.net/icon/vCollection/pmEmptyS.png]
    [tab='Vorstellung']
    NurPech
    [tab='meine Tutorials']
    [subtab='C#']

    [subtab='PHP']

    [/tabmenu]

    Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von [Blockierte Grafik: http://i.creativecommons.org/l/by-nc-nd/3.0/80x15.png] verwendet werden