Mailinglisten-Archive |
Marco Gabriel wrote: > ich bin auf der suche nach einer allgemeinen referenz, die beschreibt wie > sessions in php4 sinnvoll realisiert werden. Sessions sind ein komplexes Thema. Man muß mindestens drei Einzelthemen bei einer Diskussion betrachten: - Generierung einer Session-ID - Identifikation - Speicherung von Sessiondaten Eine ausführliche Diskussion kannst Du z.B. in der Diplomarbeit meines Arbeitskollegen Kai Voigt finden. +++ Generierung einer Session-ID +++ Eine Session ID ist ein schwer erratbarer, im Idealfall eindeutiger String. Die PHPLib verwendet ein md5() eines definierbaren Wortes. Man könnte auch mg5(getmypid()) nutzen. Der von der PHPLib generierte Wert ist zwar nicht mit absoluter Sicherheit eindeutig. Die Menge der möglichen Werte ist jedoch so groß, daß Kollisionen hinreichend unwahrscheinlich sind. +++ Identifikation +++ Die Session ID kann an zwei Stellen gespeichert werden: - Clientseitig in einem Cookie - Serverseitig in der URL Die einfachste Variante besteht in der Speicherung einer ID in einem Cookie. Leider akzeptieren nicht alle Clients Cookies, meist aus Unkenntnis der Sachlage. Etwas schwieriger ist die Speicherung der ID in der URL. Es bieten sich drei Stellen an, an denen die ID plaziert werden kann: - ID.meinserver.de (DNS Wildcard) - meinserver.de?sess_id=ID (Post, allgem. URL-Rewriting) - meinserver.de/ID/ (Rewriting, Pike Modul des eingangs genannten Kollegen) Die erste Variante wurde m.W. bereits zum Patent angemeldet. Die zweite Variante wird von der PHPLib unterstützt und funktioniert auch wunderbar, wenn man relative Links in seiner Applikation verwendet. Die dritte Variante verlangt ebenfalls nach relativen Links und läßt sich sehr einfach im Roxen Webserver integrieren, ohne daß Veränderungen am DNS notwendig sind. Bei allen Kodierungen in der URL kann der unangenehme Nebeneffekt des bookmarkens und noch schlimmer der Veröffentlichung einer kryptischen URL in den Medien eintreten. Leider hat der Fallbackmodus der PHPLib (Post, meinserver.de?sess_id=ID) den unangenehmen Nachteil, daß einige Crawler sich weitern die Site zu scannen. Dieses Thema wurde oft und hinreichend in den Archiven diskutiert. +++ Speicherung der Sessiondaten +++ Abgesehen von der Frage was alles gespeichert werden kann (Integer, Array, Hash, Objekt mit/ohne Methoden... - serialize() ), ist es interessant zu sehen wo die Sessiondaten gespeichert werden. PHPLib unterstützt u.a.: - SQL (MySQL und diverse andere) - Shared Memory - DBM Dies wird möglich durch eine mehrstufige Abstraktion zwischen der eigentlichen Session Klasse und dem Objekt zur Datenspeicherung. So könnte man sogar XML Files zur Speicherung verwenden... PHP4 ist gerade in diesem Punkt noch sehr bescheiden und greift m.W. lediglich auf Textdateien und Shared Memory zurück. Textdateien, weil diese auf jedem System zur Verfügung stehen. +++ Das PHP4 und PHPLIB +++ Läuft. Wird auch nie anders sein. Deshalb: http://phplib.netuse.de Ulf -- Ulf Wendel NetUSE Kommunikationstechnologie GmbH Siemenswall, D-24107 Kiel, Germany Fon: +49 431 386435 00 -- Fax: +49 431 386435 99
php::bar PHP Wiki - Listenarchive