HTML, CSS, PHP, MySQL

html-php.de

HTML & CSS Stylesheets Referenz JavaScript PHP MySQL Sonstiges Gästebuch Inhalt Impressum

[ Login ] [ Vorbereitungen ] [ Session ]

Login mit Session

Im folgenen Kurs werde ich ein Login mit Session erklären. Eine Session ist sehr Kurzlebig, und nur eine bestimmte Zeit gültig. Aus diesem Grund kommt es oft zu der Fehlermeldung
Die Sitzung ist abgelaufen, bitte melden sie sich neu an.
Dieses kann mit Hilfe von Cookies verhindert werden, was ich zu einen späteren Zeitraum mal erklären werde.

Vorbereitungen

Für unser Login-Script benötigen wir eine Datenbanktabelle mit folgenden Informationen:
Tabelle: user

FeldnameFeldtypErläuterung
IDINT AUTO_INCREMENT PRIMARY KEYID-Nr. des Eintrages (wird automatisch vergeben)
NickVARCHAR(30)Nick des Users
PassVARCHAR(50)Passwort (wird mit MD5 verschlüsselt)
eMailVARCHAR(70)eMail Fü evtl. Passwort-Vergessen Funktion

Für den Zugriff auf die Datenbank benötigen wir ein kurze PHP-Datei, die wir am besten in ein Unterverzeichnis, die wir mit .htaccess schützen, diese binden wir dann mit include in Ihre PHP-Datei ein. Speichern Sie diese Daten in eine Datei, z.B. zugriff.php in ein.

   <?php
   define("MYSQL_HOST",     "localhost");  // Host-Name
   define("MYSQL_USER",     "user");       // Benutzername
   define("MYSQL_PASS",     "passwort");   // Passwort
   define("MYSQL_DATABASE", "datenbank");  // Datenbank-Name
   $dz = @mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) 
      OR die('Verbindung fehlgeschlagen');
   mysql_select_db(MYSQL_DATABASE) 
      OR die('Konnte Datenbank nicht benutzen');
   ?>
   

Für die Eingabe der Login-Daten, also Nickname und Passwort schreiben wir uns ein kleines Formular und senden diese mit Post ab. Hier mal als PHP, da ich das Script später von erweiter :)

   <?php
   echo "<form method=\"post\" action=\"index.php\">\n";
   echo "<table>\n";
   echo "<tr><td>Nickname:</td><td><input name=\"a_nick\" type=\"text\" size=\"30\"></td>\n";
   echo "<tr><td>Passwort:</td><td><input name=\"a_pass\" type=\"password\" size=\"30\"></td>\n";
   echo "<tr><td> </td><td><input type=\"submit\" value=\"Versenden\"></td>\n";
   echo "</table>\n";
   echo "</form>\n";
   ?>
   

Als nächstes werden die Daten gelesen und mit den Daten in der Datenbank abgeglichen. Dabei wird das Passwort mit MD5 verschlüsselt. Achte dabei auch, das auch die Passwörter in der Datenbank mit MD5 verschlüsselt sind.

   <?php
   $nick = $_POST['a_nick'];
   $pass = md5($_POST['a_pass']);
   $fehler = "0";
   if (empty($nick)) {
     // Kein Nickname eingegeben
     $fehler = "A" ;
   }
   if (empty($pass)) {
     // kein Passwort eingegeben
     $fehler = "A" ;
   }
   if ($fehler=="0") {
     include("zugriff.php");
     $sql = "SELECT Nick, Pass FROM users WHERE Nick='$nick'"; 
     $erg = mysql_query($sql);
     $anz = mysql_num_rows($erg);
     if($anz > 0) {
       $nick2 = mysql_result($erg, 0, 'Nick');
       $pass2 = mysql_result($erg, 0, 'Pass');
       if ($nick == $nick2 and $pass == $pass2) {
         // einloggen
       } else {
         // Passwort falsch
         $fehler = "B";
       }
     } else {
       // Nickname nicht gefunden
       $fehler = "B";
     }
   }
   ?>
   

Session

In unseren Script muß oben immer als erstes session_start(); stehen. Es darf vorher nichts ausgegeben werden.

   <?php
   session_start();
   ?>

Als nächstes registrieren wie die Session-Variable

   <?php
   $_SESSION['username'] = $nick; 
   ?>

Zuvor überprüfen wir, ob nicht schon eine Session vorhanden ist. Denn dann brauchen wir sie ja nicht erneut registrieren.

   <?php
   if(!isset($_SESSION['username'])) {
     $_SESSION['username'] = $nick; 
   }
   ?>

Nun benötigen wir natürlich auch eine Funktion, um die Session zu löschen. Sozusagen, ein Logout.

   <?php
   session_destroy();
   ?>

Das war eigendlich schon das wichtigste - Ein kommplettes Script könnte dann so aussehen

   <?php
   session_start();
   $fehler = "0";
   $aktion=$_GET['action'];
   if ($aktion=="logout") {
     $fehler="A";
     session_destroy(); 
   } else {
     if(!isset($_SESSION['username'])) {
       $nick = $_POST['a_nick'];
       $pass = md5($_POST['a_pass']);
       if (empty($nick)) {
         // kein Nickname gefunden
         $fehler = "A" ;
       }
       if (empty($pass)) {
         // kein Passwort gefunden
         $fehler = "A" ;
       }
       if ($fehler=="0") {
         include("#config.php");
         $sql = "SELECT Nick, Pass FROM users WHERE Nick='$nick'"; 
         $erg = mysql_query($sql);
         $anz = mysql_num_rows($erg);
         if($anz > 0) {
           $nick2 = mysql_result($erg, 0, 'Nick');
           $pass2 = mysql_result($erg, 0, 'Pass');
           if ($nick == $nick2 and $pass == $pass2) {
             // einloggen
             $_SESSION['username'] = $nick; 
           } else {
             // Passwort falsch
             $fehler = "B";
           }
         } else {
           // Nickname nicht gefunden
           $fehler = "B";
         }
       }
     }
   }
  ?>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
      "http://www.w3.org/TR/html4/strict.dtd">
  <html>
  <head>
  <title>Login-Seite</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  </head>
  <body>
    <h1>Beispielseite Loginsystem</h1>
    <?php
      if ($fehler=="0") {
        echo "<p>Hallo $nick <br> du bist erfolgreich eingeloggt</p>\n";
        echo "<p><a href=\"index.php?action=logout\">ausloggen</a></p>\n";
      } else {
        if ($fehler=="A") {
          echo "<p>Bitte einloggen</p>\n";
        } elseif ($fehler=="B") {
          echo "Name oder Passwort falsch\n";
        }
        echo "<form method=\"post\" action=\"index.php\">\n";
        echo "<table>\n";
        echo "<tr><td>Nickname:</td><td><input name=\"a_nick\" type=\"text\" size=\"30\"></td>\n";
        echo "<tr><td>Passwort:</td><td><input name=\"a_pass\" type=\"password\" size=\"30\"></td>\n";
        echo "<tr><td> </td><td><input type=\"submit\" value=\"Versenden\"></td>\n";
        echo "</table>\n";
        echo "</form>\n";
      }
    ?>
  </body>
  </html>

Das ganze sieht dann wie folgt aus: Beispiel
Username = User       Passwort: passwort

Hier wird es sicherlich noch eine Fortsetzung geben

back top next