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 `$öffnen` , callback `$schließen` , callback `$lesen` , callback `$schreiben` , callback `$löschen` , 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

`öffnen`

`schließen`

`lesen`

  Damit die Speicherroutine funktioniert wie erwartet, muss die read-Funktion 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.

`schreiben`

  > 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.

`löschen`

`gc`

### 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 open($save_path, $session_name)
{
global $sess_save_path;
$sess_save_path = $save_path;
return(true);
}
function close()
{
return(true);
}
function read($id)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return (string) @file_get_contents($sess_file);
}
function write($id, $sess_data)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "w")) {
$return = fwrite($fp, $sess_data);
fclose($fp);
return $return;
} else {
return(false);
}
}
function destroy($id)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
}
function gc($maxlifetime)
{
global $sess_save_path;
foreach (glob("$sess_save_path/sess_*") as $filename) {
if (filemtime($filename) + $maxlifetime < time()) {
@unlink($filename);
}
}
return true;
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
// verfahren Sie mit Sessions wie gewohnt
?>`

### Anmerkungen

Warnung

Ab PHP 5.0.5 werden die Routinen `schreiben` und `schließen` 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