template
PHP-Sessions sind dazu geeignet, während einer Sitzung anfallende Werte (Strings oder Zahlen) zu speichern und wieder abzurufen, z.B.
- Benutzername (indirekt als Authentifizierungsflag)
- Maskeneingaben (zur Vorbelegung bei wiederholter Anzeige)
- Skriptübergreifende Informationen (z.B. aktuelle Seitennummer beim Blättern)
- Benutzereinstellungen (z.B. Max.Anzahl anzuzeigender Treffer oder 'Customized Skin'-Infos)
Ü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 ...
}
template |
 |