phpbar.de logo

Mailinglisten-Archive

[php] allgemeines zum thema session-handling

[php] allgemeines zum thema session-handling

Ulf Wendel UW_(at)_NetUSE.DE
Mon, 31 Jan 2000 15:57:32 +0100


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