Mailinglisten-Archive |
Danke Frank. Das hilft mir extrem. Ich dachte mir das fast schon, dass alle Session-Infos bei Session-Start übertragen werden (Das Beispiel unter http://php.net/function.session-set-save-handler.php ist da ja schon recht aussagekräftig. Aber ich dachte es gäbe doch einen anderen Weg. Dann muss ich jetzt nochmal genauer in mich gehen und mir überlegen, wie ich mein platzproblem am geschicktesten löse. Dein Vorschlag mit der Session Klasse ist nicht schlecht, dem werde ich mal nachgehen. Gibt es einen groben Wert, wieviel schneller eine Sessionverwaltung in einer Datenbank (MySQL) gegenüber der Standardverwaltung ist? Herzlichsten Dank Grüße Andreas Am 07.10.2004 16:24 Uhr schrieb "Frank Rasche" unter <phpml at raschesweb.de>: > 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 > -- wdv Medien & Kommunikation GmbH & Co. OHG Mediendatenverarbeitung Andreas Heigl Siemensstrasse 6 61352 Bad Homburg Germany Telefon +49-(0)6172-670-185 Telefax +49-(0)6172-670-181 www.wdv.de
php::bar PHP Wiki - Listenarchive