Sessions mit PHP - Grundlagen und HowtoDaniel T. Gorski, August 2000
Wozu Sessions?Sofern man dieses Tutorial
online liest, wird man entweder auf einen Link geklickt, oder die
Adresse dieser Seite manuell eingegeben haben. Spätestens dabei wird es
(hoffentlich) aufgefallen sein, dass die Adressen der meisten Webseiten
mit http:// beginnen. Die Abkürzung HTTP liest sich
"HyperText Transfer Protocol" und ist der Grundstein für das World Wide
Web, wie wir es heute kennen - es regelt die Verständigung zwischen dem
Client (z.B. Browser) und dem Webserver, der die auf ihm gespeicherten
Webseiten zur Verfügung stellt. In der derzeitigen Implementation
(HTTP 1.1), hat das HTT-Protokoll leider einen großen Nachteil: es ist
"zustandslos". Vereinfacht bedeutet das:
- Der Client (Browser) öffnet eine Verbindung zum Webserver, und fragt nach einer Webseite (Request).
- Der Webserver antwortet (Response) mit dem gewünschten Inhalt (oder einer Fehlermeldung).
- Der Client empfängt bestenfalls die Daten und stellt sie dar.
- Die
Verbindung zwischen Client und Server wird beendet, es wird kein
"Zustand" - keine dauerhafte Verbindung - aufrecht erhalten.
Merke:
- Das HTT-Protokol ist zustandslos (stateless)
- Request: die Anfrage des Browsers an den Webserver
- Response: die Antwort des Webservers auf einen Request
Zunächst klingt diese Verfahrensweise logisch und nicht
besonders tragisch, da offensichtlich die angeforderten Daten - wie
gewünscht - ihren Weg zum Browser finden. Das Problem für den
Programmierer der Webseiten-Logik entsteht erst dann, wenn es nötig
wird, den Client von einem Request zum anderem zu identifizieren - d.h.
die Requests zu unterscheiden, ob sie vom gleichem Client stammen oder
nicht. Diese Unterscheidung (Authentifizierung) ist schon z.B.
bei einer einfachen Warenkorb-Funktion notwendig, damit bestellte
Artikel nicht im Warenkorb eines anderen Benutzers landen, der sich
zufällig zur gleichen Zeit im gleichem Online-Shop bewegt. Ebenfalls
wird diese Unterscheidung notwendig, um ausgewählten Benutzern
restriktiven Zugriff auf spezielle Teile einer Website zu erlauben
(Authorisierung) z.B. auf Administrationsbereiche oder Bereiche in
denen Informationen für einen geschlossenen Benutzerkreis (CUG - closed
user group) zur Verfügung stehen. Eine eindeutige Unterscheidung
anhand der IP-Adresse ist - wie es oft landläufig von Neulingen
geglaubt wird - nicht möglich bzw. stellt aus der Sicht des Webservers
keinen sicheren Weg zu Authentifizierung eines Clients dar, da
einerseits mehrere Clients mit der gleichen IP im WWW unterwegs sein
können (Masquerading) und andereseits ein Client über mehrere Requests
hinweg verschiedene IP-Adressen (Proxies) haben kann. Wie das genau
funktioniert ist aber eine andere Geschichte.
Merke:
- Eine IP ist in unserem Kontext nicht eindeutig.
- Authentifizierung: Wiedererkennung eines Benutzers.
- Authorisierung:
Überprüfung individueller Zugangsdaten eines wiedererkannten Benutzers
und Gewährleistung damit vebundener Rechte.
Die Lösung für das Problem sind sog. Sessions-IDs, eindeutige
"Schlüssel", die bei der HTTP-Kommunkation über den Zeitraum einer
Sitzung (engl. Session) auf einer Webseite ihre Gültigkeiten behalten.
|