session_set_cookie_params
session_start
Session-Funktionen
PHP Manual

# session_set_save_handler

(PHP 4, PHP 5)

session_set_save_handler — Setzt benutzerdefinierte Session-Speicherfunktionen

### Beschreibung

bool session_set_save_handler ( callback `$open` , callback `$close` , callback `$read` , callback `$write` , callback `$destroy` , callback `$gc` )

session_set_save_handler() setzt die benutzerdefinierten Session-Speicherfunktionen, die zur Speicherung und Wiederherstellung von zur Session gehörigen Daten verwendet werden. Dies ist äußerst nützlich, wenn eine andere als die mit PHP-Sessions zur Verfügung stehende Art der Speicherung, z.B. die Speicherung der Session-Daten in einer lokalen Datenbank, bevorzugt wird.

### Parameter-Liste

`open`

  Die öffnen-Routine funktionert wie ein Konstruktor in einer Klasse und wird ausgeführt, wenn die Session geöffnet wird. Sie erwartet zwei Parameter: als Ersten den Speicherpfad und als Zweiten den Namen der Session.

`close`

  Die schließen-Routine funktionert wie ein Destruktor in einer Klasse und wird am Ende der Session ausgeführt.

`read`

  Damit die Speicherroutine funktioniert wie erwartet, muss die lesen-Routine immer eine Zeichenkette zurückgeben. Wenn es keine Daten zu lesen gibt, geben Sie eine leere Zeichenkette zurück. Rückgabewerte anderer Routinen werden in boolesche Ausdrücke umgewandelt. `TRUE` für einen Erfolg, `FALSE` für einen Fehler.

`write`

  > Hinweis: Die schreiben-Routine wird nicht ausgeführt, bevor die Ausgabe abgeschlossen ist. Deshalb werden auch niemals Fehlermeldungen der schreiben-Routine im Browser erscheinen. Wenn die Ausgabe von Fehlermeldungen nötig ist, sollte diese stattdessen in eine Datei geschrieben werden.

`destroy`

  Die löschen-Routine wird ausgeführt, wenn eine Session mittels session_destroy() gelöscht wird. Sie erwartet die Session-ID als einzigen Parameter.

`gc`

  Der Speicherbereiniger (garbage collector) wird ausgeführt, wenn der Session-Speicherbereiniger ausgeführt wird. Er erwartet die maximale Session-Verfallszeit als einzigen Parameter.

### Rückgabewerte

Gibt bei Erfolg `TRUE` zurück, im Fehlerfall `FALSE`.

### Beispiele

Beispiel #1 session_set_save_handler() Beispiel

Das folgende Beispiel liefert eine dateibasierte Session-Speicherung, die der Standard-Speicherroutine `files` der PHP-Sessions ähnlich ist. Dieses Beispiel kann problemlos erweitert werden, dass es Datenbank-Speicherung mittels ihrer bevorzugten PHP-gestützten Datenbank beinhaltet.

`<?php
function oeffne($speicherpfad, $session_name)
{
global $sess_speicherpfad;
$sess_speicherpfad = $speicherpfad;
return(true);
}
function schliesse()
{
return(true);
}
function lese($id)
{
global $sess_speicherpfad;
$sess_datei = "$sess_speicherpfad/sess_$id";
return (string) @file_get_contents($sess_datei);
}
function schreibe($id, $sess_daten)
{
global $sess_speicherpfad;
$sess_datei = "$sess_speicherpfad/sess_$id";
if ($fp = @fopen($sess_datei, "w")) {
$return = fwrite($fp, $sess_daten);
fclose($fp);
return $return;
} else {
return(false);
}
}
function loesche($id)
{
global $sess_speicherpfad;
$sess_datei = "$sess_speicherpfad/sess_$id";
return(@unlink($sess_datei));
}
function gc($maxlifetime)
{
global $sess_speicherpfad;
foreach (glob("$sess_speicherpfad/sess_*") as $dateiname) {
if (filemtime($dateiname) + $maxlifetime < time()) {
@unlink($dateiname);
}
}
return true;
}
session_set_save_handler("oeffne", "schliesse", "lese", "schreibe", "loesche", "gc");
session_start();
// verfahren Sie mit Sessions wie gewohnt
?>`

### Anmerkungen

Warnung

Ab PHP 5.0.5 werden die Routinen `write` und `close` nach dem Zerstören von Objekten aufgerufen und können deshalb keine Objekte verwenden oder Exceptions (Fehler-, Ausnahmesituationen) auslösen. Objekt-Destruktoren können aber Sessions verwenden.

Es ist möglich, session_write_close() über den Destruktor aufzurufen, um dieses Henne-Ei Problem zu lösen.

Warnung

Bei manchen SAPIs ändert sich das aktuelle Arbeitsverzeichnis, falls die Session durch die Beendigung des Skripts geschlossen wird. Mittels session_write_close() ist es möglich, die Session schon früher zu schließen.

### Siehe auch

- Die session.save_handler Konfigurationsanweisung

session_set_cookie_params
session_start
Session-Funktionen
PHP Manual