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.
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_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 ?>
|
|
Siehe auch die session.save_handler
Konfigurationsanweisung.