PHP Handbuch
Zurück |  | Weiter

# session_set_save_handler

(PHP 4, PHP 5)

session_set_save_handler -- Setzt benutzerdefinierte Session-Speicherfunktionen

## Beschreibung

bool session_set_save_handler ( string öffnen, string schließen, string lesen, string schreiben, string löschen, string 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. Gibt bei Erfolg `TRUE` zurück, im Fehlerfall `FALSE`.

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

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.

Damit die Speicherroutine funktioniert wie erwartet, muss die read-Function immer einen String-Wert 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.

Warnung
Ab PHP 5.0.5 werden die Routinen für das Speichern und Beenden nach dem Zerstören von Objekten aufgerufen. Daher können Destruktoren Sessions verwenden aber Session-Routinen keine Objekte. In vorherigen Versionen wurden sie in der umgekehrten Reihenfolge aufgerufen. Es ist möglich, session_write_close() über den Destruktor aufzurufen, um dieses Henne-Ei Problem zu lösen.

Beispiel 1. session_set_save_handler() Beispiel

`<?php
function open($save_path, $session_name)
{
global $sess_save_path, $sess_session_name;
$sess_save_path = $save_path;
$sess_session_name = $session_name;
return(true);
}
function close()
{
return(true);
}
function read($id)
{
global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "r")) {
$sess_data = fread($fp, filesize($sess_file));
return($sess_data);
} else {
return(""); // Must return "" here.
}
}
function write($id, $sess_data)
{
global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "w")) {
return(fwrite($fp, $sess_data));
} else {
return(false);
}
}
function destroy($id)
{
global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
}
/************************************************
* WARNUNG - Sie müssen hier irgendeine Art von *
* Speicherbereinigungsroutine realisieren. *
************************************************/
function gc($maxlifetime)
{
return true;
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
// verfahren Sie mit Sessions wie gewohnt
?>`

Siehe auch die session.save_handler Konfigurationsanweisung.

Zurück | Zum Anfang | Weiter
session_set_cookie_params | Nach oben | session_start