No more Cookies Druckversion
ASP Sessions
ohne Sitzungscookies
Seite
(1) [2] [3] [4] [>
Mo, 18.03.2002
Autor: Olaf Lüder

Überblick

Mit ASP steht Ihnen ein sehr leistungsstarkes und komfortables Objekt zur Verwaltung von Sitzungen zur Verfügung. Sie können auf einfache Weise benutzerbezogene Variablen und Objekte speichern, die seitenübergreifend zur Verfügung stehen. Sitzungen werden in ASP automatisch gestartet und nach einer frei wählbaren Zeitspanne ohne Zugriffe automatisch beendet. Beim Start und Ende einer Sitzung werden Ereignisse ausgelöst, die es Ihnen ermöglichen, zu diesen Zeitpunkten eigene Aktionen ausführen zu lassen.

Insgesamt kann man das Session-Konzept der Active Server Pages als sehr gelungen bezeichnen, es gibt aber leider einen Wermutstropfen – zur Realisierung werden Cookies eingesetzt.

Wie funktionieren Sessions intern?

Sitzungen werden in ASP durch eindeutige Session-Cookies identifiziert. Das Cookie selbst enthält nur eine eindeutige Sitzungskennung, die zwischen dem Browser des Clients und dem Server ausgetauscht wird und eine eindeutige Zuordnung der Anfrage zu der entsprechenden Sitzung ermöglicht.
Die eigentlichen Daten des Session-Objektes werden im Speicher des Webservers abgelegt. Dies hat einerseits den Vorteil, dass nur ein relativ kleines Datenpaket übertragen werden muss, andererseits die im Session-Objekt gespeicherten Daten verborgen bleiben und damit vor direkten Zugriffen des Anwenders geschützt sind.

Eine neue Sitzung wird durch den Aufruf einer beliebigen ASP-Seite der Anwendung gestartet. Als erstes wird eine neue, eindeutige Sitzungsidentifikation vergeben, auf die Sie mittels Session.SessionID zugreifen können; bei dieser ID handelt es sich einfach um einen fortlaufenden Zähler.
Anschließend wird die Session_OnStart-Methode in der Datei global.asa aufgerufen und dem Browser in der Antwort automatisch ein temporäres Cookie gesendet, dass eine eindeutige Sitzungskennung enthält, die folgendermaßen aufgebaut ist:

ASPSESSIONIDGQGGGNBG=LPPPHIMBDECFMCLIFPLPOJNP

Versuchen Sie gar nicht erst, einen Zusammenhang zwischen dem Wert des Cookies und der internen SessionID herauszufinden. Um es Hackern unmöglich zu machen, durch Probieren einen Cookie zu finden, der zu einer gültigen SessionID passt, wird der Aufbau der Cookies wohl immer eines der best gehütetsten Geheimnisse bleiben.
Es ist anscheinend sogar so, dass es zwischen diesen Werten gar keinen direkten (mathematischen) Zusammenhang gibt, da ASP beim Start einer neuen Sitzung zwar eine neue interne SessionID vergibt, das bisherige Cookie aber unverändert beibehalten wird.

Eine typische Antwort des Servers beim Start einer neuen Sitzung könnte wie folgt aussehen:

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Sun, 10 Mar 2002 12:11:15 GMT
Connection: Keep-Alive
Content-Length: 135
Content-Type: text/html
Set-Cookie: ASPSESSIONIDQQQGQXRQ=IHPNBGKBGHOEHBPFGDFIAOGG; path=/
Cache-control: private

Dem Browser wird durch die Antwort ein neues Cookie übermittelt. Dieses ist zwar nur temporär und verfällt beim Schließen des Browser automatisch, stößt bei einigen Benutzern aber trotzdem auf so große Widerstände, dass diese die Annahme sämtlicher Cookies pauschal verweigern.

Lehnt ein Anwender die Annahme des Session-Cookies ab, ist es nicht möglich, die Funktionalität des Session-Objektes zu nutzen. Eine manuelle Übergabe der SessionID im Querystring oder versteckten Formularfeldern, wie sie in PHP oder ASP.NET zur Verfügung steht, wurde von Microsoft leider nicht vorgesehen. Für diesen Fall müssen also Alternativen gefunden werden.

Alternativen

Eine Möglichkeit wäre, komplett auf Sessions zu verzichten und alle Daten per Querystring oder Formularfeldern an die nächste Seite weiterzureichen. Ein anderer Ausweg bietet sich durch den Einsatz einer eigenen Sitzungsverwaltung, die sich z.B. datenbankgestützt realisieren lässt.
Neben dem zusätzlichen Aufwand oder den zusätzlichen Kosten bei Einsatz einer Lösung von Drittanbietern muss man hierbei allerdings häufig auch Abstriche bei der Funktionalität machen, so wird in den meisten Fällen keine Speicherung von Objekten unterstützt und der Sitzungsstatus geht beim Aufruf von statischen HTML-Seiten verloren.

Mit dem IIS 4 hat Microsoft selbst eine Lösung dieses Problems vorgeschlagen. Durch den Einsatz des Cookie-Munger-Filters kann an alle in der Seite vorhandenen Links automatisch eine SessionID angefügt werden. Neben einigen funktionalen Einschränkungen macht es sich mit Blick auf die Performance aber teilweise deutlich bemerkbar, dass alle Antworten des Servers komplett durchsucht und bearbeitet werden müssen.

Wir haben daher nach einer Lösung gesucht, die folgende Kriterien erfüllt:

  • minimaler Anpassungsaufwand für bestehende Web-Sites
  • hohe Funktionaliät und Kompatibität zum originalen Session-Objekt
  • minimale Performanceeinbußen
© 2001, 2002 NOGETEC GmbH - Alle Rechte vorbehalten. - Impressum
Der Inhalt dieser Seiten ist urheberrechtlich geschützt. Texte, Grafiken und Dateien dürfen ohne unsere schriftliche Genehmigung - auch auszugsweise - nicht kopiert, vervielfätigt oder vertrieben werden.
Übersicht
13 Beiträge
in 11 Kategorien

ASP classic (7)
ASP.NET (0)
Komponenten (2)
ISAPI-Filter (4)
Konfiguration (0)
No more Cookies
ASP Sessions
ohne Sitzungscookies

Sie nutzen das integrierte Session-Objekt?
Ihre Kunden akzeptieren aber keine Cookies?

Wir haben die Lösung...
Load me up
ASP Fileupload
ohne Komponenten

Sie möchten Dateien auf den Server heraufladen,
ohne Komponenten zu installieren?

Gar kein Problem...
Little Secrets
Dateinamen & Parameter
im URL verbergen

Verschiedene Pfade auf eine Datei abbilden...?
Skriptnamen weglassen, Parameter verstecken...?

So funktioniert's ...
Lost in Space
Recordsets
auf Abwegen

Sie nutzen Datenbanken & ADO-Recordsets...?
Die Performance ist aber nicht befriedigend...?

Dann lesen Sie weiter...
Subdomains
Subdomains einrichten
ohne viel Aufwand

Sie möchten Subdomains verwenden, mit eigenen Verzeichnissen aber ohne extra Host-Header oder Web-Sites einzurichten?

Wir zeigen Ihnen wie...