PHP: Sessions

Erstellt: 28.09.2006 | Aktualisiert: 02.10.2006

Sessions bieten die Möglichkeit, Daten für den wiederholten Aufruf von Webseiten zu speichern. Besucher erhalten eine eindeutige ID (meistens in einem Cookie gespeichert) und können so während ihres “Aufenthaltes” identifiziert werden.

PHP Session Funktionen

Mit Hilfe verschiedener PHP-Funktionen lassen sich Sessions starten, neue Variablen setzen und Session-IDs übergeben. Eine gute Übersicht auf alle Session-Funktionen erhält man im PHP-Manual:

Wie wird eine Session gestartet?

Um eine Session zu initialisieren wird die Funktion session_start() verwendet. Diese Funktion startet eine neue Session oder nimmt einer bestehende wieder auf. Zu beachten gilt, dass die Funktion aufgerufen werden muss, bevor irgendwelche sonstige Daten an den Browser geschickt werden.

< ?php session_start(); ?>

Wie werden Daten in einer Session gespeichert?

Für das ablegen von Daten in einer Session gibt es zwei Möglichkeiten: Die PHP-Funktion session_register() oder das superglobale Array $_SESSION, welches für das Registriern normalerweise verwendet wird:

$_SESSION['name'] = 'Hans Muster';

Können Variablen auch wieder gelöscht werden?

Klar! Mit der Funktion session_unset() werden ALLE gesetzte Variablen gelöscht. Bei der Verwendung des globalen Arrays $_SESSION sollte die Funktion unset() angewendet werden, um eine Variable zu löschen.

unset($_SESSION['name']);

Woher bekomm ich die aktuelle Session-ID?

Mit der Funktion session_id() kann die aktuelle Session-ID ausgelesen oder gesetzt werden. Um eine neue Session-ID zu setzen, muss die Funktion vor session_start() augerufen werden und einen entsprechenden Wert enthalten.

session_id();

Ausgegeben wird eine kryptisch Zahl in dieser Form: d56491241ca789a56e6a5e72cce49f80

Daneben gibt es zum Ermitteln der aktuellen Session-ID auch noch die Konstante SID. Diese ist allerdings standardmässig nicht aktiviert. Verwendet wird SID insbesondere für das Übermitteln der Session-ID via URL.

Haben Session auch einen Namen?

Dafür ist die Funktion session_name() reserviert. Diese funktioniert adäquat zur oben genannten Funktion session_id(). Wird die Funktion “leer” aufgerufen wird der Session-Name angezeigt (im Normalfall, wenn kein Name gesetzt wurde lautet dieser PHPSESSID), um einen eigenen Session-Name zu setzen muss die Funktion inklusiv Wert wiederum vor der Funktion session_start() aufgerufen werden.

session_name();

Wo werden die Session-Daten eigentlich gespeichert?

Session-Daten werden in einem Verzeichnis auf dem Webserver abgelegt. Dieses Verzeichnis ist in der Datei php.ini definiert. Ãœber die Funktion session_save_path() kann dieses Verzeichnis eruiert oder neu gesetzt werden.

session_save_path();

Wie werden Session-IDs übergeben?

Grundsätzlich gibt es dafür zwei Varianten. Entweder die Session-ID wird in einem Cookie gespeichert oder als Parameter entweder mit der Methode GET oder POST direkt an die URL angehängt.

< ?php
session_start();

// Daten in der Session speichern
$_SESSION['nickname'] = "volpe";

// Session-ID wird an eine andere Seite übergeben, sofern
// das Session-Cookie akzeptiert wurde (Cookie-Variante)
echo'Andere Seite';

// Session-ID wird an die URL angehängt und auf diese
// Weise an die andere Seite übergeben (GET-Variante mit der Konstante SID)
echo'Andere Seite';

// Session-ID wird über die POST-Variante übergeben
// (Session-ID im form-tag)
echo'
...
'; // oder in einem versteckten input-Feld echo'
...
';

Die Cookie-Variante ist sicherlich der URL-Variante vorzuziehen. Allerdings kann das Setzen von Cookies client-seitig abgelehnt werden, womit die Applikation nicht wie gewünscht ausgeführt werden kann. Die URL-Variante kann in diesem Falle Abhilfe schaffen, wobei das Anhängen der Session-ID an der URL ein gewisses Sicherheitsrisiko beinhaltet.

Wie können einem Session-Cookie Parameter übergeben werden?

Wie wir gesehen haben können Sessions in Cookies gespeichert werden. Für das Setzen Cookie eigeneR Parameter steht die Funktion session_set_cookie_param() zur Verfügung.

$verfallsdatum = time()+3600; //in einem Tag
session_set_cookie_param($verfallsdatum, 'pfad/zum/verzeichnis/')

Wie lösche ich eine gesamte Sitzung?

Um die Daten einer Session zu löschen werden verschiedene Funktionen benötigt. Mit session_destroy() werden alle Variablen der Session gelöscht.

Globale Variablen und das Session-Cookie bleiben allerdings bestehen. Das heisst um eine komplette Session zu löschen muss auch die Session-ID gelöscht werden bzw. das Cookie in welchem die Session-ID gespeichert wurde.

Beispiel für das Löschen einer gesamten Session im PHP-Manual

Verwandte Snippets