Mailinglisten-Archive |
Hallo Andreas, Andreas Heigl schrieb am Donnerstag, 7. Oktober 2004 um 13:31: > Aus Performance-Gründen (Die Session-Dateien kriegen schon mal 5-7 MB) > wollte ich das ganze jetzt auseinanderklamüsern und dachte locker bei mir > 'mensch, schreib dir doch einen session_set_save_handler'. Wird nicht ganz einfach, dein eigener Sessionhandler (write) bekommt die Sessiondaten bereits als serialisiertes Array. Die müsstest du beim Schreiben (Write-Handler) via unserialize() auseinanderklamüsern ;) und in getrennte DB-Felder bspw. eintragen. > Aber wann genau wird dann welche Funktion aufgerufen? Kann eine solche > Funktion dann einzelne Session-Variablen getrennt abrufen? Nicht wirklich. Der Read-Handler wird nach dem Open-Handler (bei PHP dann session_start()) aufgerufen, holt den kompletten Inhalt der Session und erwartet ihn als serialisiertes Array. Danach stehen dir alle Sessiondaten als assoziatives Superglobal-Array ($_SESSION) zur Verfügung. Am besten schaust du dir nochmal das Beispiel auf http://php.net/function.session-set-save-handler.php an. Das zeigt nachgebildet, wie PHP seine Session-Daten verwaltet. > (Dann könnte ich jede menge zeug in der Datenbank haben, würde aber fürs > einlesen momentan nicht benötigter Sessionvariablen nicht unnötig zeit > verlieren) Entweder definierst du deine eigenen Session-Handler in einer Klasse und bestimmst vor session_start() (also dem Aufruf der Sessionhandler), welche Variablen du brauchen wirst. D.h. du müsstest deinem Session-Read-Handler von vorneherein als z.B. Eigenschaft deiner Session-Klasse mitteilen, welche DB-Felder er auslesen und das ganze als serialisiertes Array zurückgegeben soll. Beim Write-Handler müsstest du dann wie oben beschrieben aber die Sessiondaten erstmal trennen. Oder du schreibst eigene Session-Management-Klasse und verzichtest auf die PHP-Funktionen session_start(), session_id(), trans_sid usw. sowie die $_SESSION-Superglobals. D.h. deine Session-Klasse müsste dann eine Session selber registrieren, verwalten und schliessen. Dann allerdings musst dich auch selbstständig um die komplette GC-Organisation kümmern. Aber du könntest deine Daten speichern wie und wo du lustig bist ;) > Und wie muss dann die Datenbankstruktur aussehen? Im Prinzip benötigst du rudimentär nur ein Feld für die Session-ID und ein Textfeld für die Sessiondaten. Günstig ist sicher noch ein Timestamp damit man zeitabhängig einen GC-Lauf starten kann und was du in deinen eigenen Handlern noch so brauchst. > Und gibt¹s da nicht was von ... PEAR? Das HTTP-Session-Paket aus PEAR hilft dir nicht wirklich weiter, weil sie ebenfalls auf den PHP-Sessions aufsetzt und lediglich ein paar Zusatzfunktionen wie isExpired(), isIdle() usw. aufruft. HTH Frank
php::bar PHP Wiki - Listenarchive