template

Index :: PHP/MySQL :: Sessions

PHP-Sessions sind dazu geeignet, während einer Sitzung anfallende Werte (Strings oder Zahlen) zu speichern und wieder abzurufen, z.B.
Üblicherweise werden Session-Dateien beim erstmaligen Verbindungsaufbau auf dem Webserver angelegt, wobei sie als Dateiname die (automatisch erzeugte) sogenannte Session-ID in hexadezimaler Schreibweise erhalten, ein String, der standardmäßig bis zu 32 Zeichen lang sein kann. In der php.ini können bzgl. Verwendung, Generierung und Länge der Session-ID gesonderte Einstellungen vorgenommen werden.

Die Session-Datei agiert wie eine simple INI-Datei, d.h. alle Werte werden in Form von Feldname/Feldinhalt-Pärchen verwaltet. Beim Schreiben und Lesen von Werten wird der Feldname dann als Schlüssel (sozusagen als Variablenname) verwendet.

Einfaches Beispiel:
session_start(); // Zugriff (für dieses Skript) initialiseren
if (isset($_SESSION['username'])) { // Variable existiert
  $username = $_SESSION['username'];
} else { // Variable anlegen
  $_SESSION['username'] = $username = "";
}
if (strlen($username)) echo "Hallo, ", $username, "!";
else echo "Hallo, Sie sollten sich <a href='login.php'>anmelden</a>.";
Beispiel zur Zwischenspeicherung von Formulareingaben:
Php Einleitung
session_start(); if (!isset($_SESSION['vname'])) { // erster Aufruf $_SESSION['vname'] = ''; $_SESSION['nname'] = ''; $_SESSION['alter'] = ''; } if (strlen($_POST['ok'])) { // Formular verarbeiten $vname = $_POST['vname']; $nname = $_POST['nname']; $alter = intval($_POST['alter']); // ... hier evtl. in Datenbank speichern ... //---- in Session speichern $_SESSION['vname'] = $vname; $_SESSION['nname'] = $nname; $_SESSION['alter'] = $alter; } else { // Formular mit letzter Eingabe vorbelegen $vname = $_SESSION['vname']; $nname = $_SESSION['nname']; $alter = intval($_SESSION['alter']); }
Weiter unten, im BODY, das Formular:
<form action='<?php echo basename($_SERVER['PHP_SELF']); ?>' method='post'> Vorname <input type='text' name='vname' value='<?php echo htmlentities($vname); ?>'><br> Nachname <input type='text' name='nname' value='<?php echo htmlentities($nname); ?>'><br> Alter <input type='text' name='alter' value='<?php echo $alter; ?>'><br> <input type='submit' name='ok' value='Ok'> </form>
Bei Sites, die ein Login erfordern, werden Sessions gerne benutzt, um festzustellen, ob sich der Benutzer bereits angemeldet hat. Dies kann am einfachsten dadurch realisiert werden, mittels session_is_registered() die Existenz einer bestimmten Session-Variablen zu prüfen, die als Flag für 'erfolgreich authentifiziert' dient. Diese Prüfung wird immer ganz am Anfang eines Skriptes durchgeführt; schlägt sie fehl, dann liegt noch keine Authentifizierung vor, und es wird mittels include() eine Login-Seite aufgerufen sowie mittels exit das aktuelle Skript verlassen.
Erst nachdem im Login-Formular eine passende Eingabe erfolgt ist, wird die besagte Session-Variable angelegt und dient nun allen Skripten als Beweis für eine durchgeführte Anmeldung. Praktischerweise könnten in dieser Session-Variablen nach dem Anlegen auch gleich Statusinformationen des Benutzers vermerkt werden. So würde sie nicht nur der Login-Kontrolle sondern auch noch einer individuellen Rechteprüfung dienen.

Oft wird in der Datenbank eine explizite Benutzertabelle geführt. Der User-Datensatz enthält dann Informationen wie z.B. UserID, Nachname, Vorname, Anmeldename, Passwort, Status/Rechteflags, Login-Zeit oder die Zeit des letzten Zugriffs. Hier könnte man zusätzlich ein Feld 'SessionID' verwenden, um zu prüfen, ob die Authentifizierung schon erfolgt ist:
session_start();
$query = "SELECT COUNT(*) FROM benutzer WHERE SessionID='". session_id() ."' LIMIT 1";
$row = mysql_fetch_row(mysql_query($query));
if ($row[0]) {
  // Anmeldung wurde bereits durchgeführt
  // ... gewünschte Seite zeigen ...
} else {
  // Anmeldung muss noch durchgeführt werden
  // ... Login-Seite zeigen ...
}
Auf der Login-Seite wird dann nach erfolgreicher Anmeldung die Session-ID eingetragen:
session_start();

// ... Login-Eingaben prüfen -> $login_ok ...
// ... UserID ermitteln -> $userid ...

if ($login_ok) {
  // Anmeldung erfolgreich
  mysql_query("UPDATE benutzer SET SessionID='". session_id() ."' WHERE UserID=$userid LIMIT 1");
  // ... Start- bzw. Menü-Seite zeigen ...
} else {
  // Anmeldung fehlgeschlagen
  // ... Login-Seite erneut zeigen ...
}

Index :: PHP/MySQL


template