2009-11-16 4 views
24

Da HTTP ein statusloses Protokoll ist, wenn ein Client eine Anzahl von Anforderungen an den Server stellt, wie identifiziert der Server die Anforderungen eines bestimmten Clients über einen bestimmten Zeitraum eindeutig, z. B. t1, t2, t3 ..HTTP-Sitzungsverfolgung

Ich blätterte im Internet und stieß auf Begriffe wie Sitzungs-ID, URL-Neuschreiben und Cookies. Aber es wäre toll, wenn jemand es besser erklärt. Insbesondere welcher Teil der HTTP-Anfrage und -Antwort würde für das Sitzungs-Tracking verwendet werden?

Antwort

38

Wie Sie bereits erwähnt haben, umfassen gängige Methoden zur Implementierung des HTTP-Sitzungs-Tracking das Umschreiben von URLs und Cookies. Die Sitzungsverfolgung erfordert grundsätzlich, dass eine Sitzungs-ID für mehrere Anforderungen an den Server beibehalten wird. Dies bedeutet, dass jedes Mal, wenn ein bestimmter Client eine Anfrage an den Server stellt, dieselbe Sitzungs-ID übermittelt wird. Der Server kann diese ID verwenden, um die von ihm verwalteten Sitzungsinformationen zu suchen.

Bei der Verwendung von Cookies fordert der Server den Client zum Speichern eines Cookies auf, indem er den HTTP-Antwortkopf Set-Cookie setzt. Dieses Cookie enthält die eindeutige ID-Sitzung zu diesem Client zugeordnet - in diesem Beispiel wird die Zeichenfolge ‚ABAD1D‘:

Set-Cookie: JSESSIONID=ABAD1D;path=/ 

Das Cookie ist dann vom Client zum Server mit Hilfe der auf jeder Anforderung Cookie HTTP-Request-Header zurückgeschickt und Auf diese Weise wird dem Server bei jeder Anfrage die Session-ID mitgeteilt, die dem Client aktuell zugewiesen ist.

Cookie: JSESSIONID=ABAD1D 

Bei der URL-Umschreibung wird diese Sitzungs-ID stattdessen irgendwo in der URL gesendet. Wieder extrahiert der Server die Session-ID aus der URL, so dass er die Sitzung für einen bestimmten Client-Lookup kann:

http://my.app.com/index.jsp;JSESSIONID=ABAD1D 

jedoch

, muss der Server auch sicherstellen, dass alle URLs in den Web-Seiten zurück an den Client gesendet werden auch neu geschrieben, um diese bestimmte Clientsitzungs-ID zu enthalten. Da die Sitzungs-ID in den URLs codiert ist, ist diese Methode der Sitzungsverfolgung für den Browser transparent. Häufig wird ein Server auf das Umschreiben von URLs zurückgreifen, wenn er feststellt, dass kein Sitzungscookie auf dem Client eingerichtet werden kann. Dies bedeutet, dass der Client keine Cookies unterstützt.

Beachten Sie, dass Sitzungen ablaufen können. Das bedeutet, wenn der Server eine bestimmte Sitzungs-ID für einen bestimmten Zeitraum nicht "sieht", können die Sitzungsdaten entfernt werden, um Ressourcen zu schonen.

+0

Danke für die Info .. :) – dexter

+2

@RickNZ verliere nicht das Vertrauen in SO - Ich habe nicht Ihre Antwort kopieren. Wenn Sie meine Revisionen durchsehen, werden Sie sehen, dass ich zuerst HTTP-Sitzungen erklärt habe. Ich habe dann einige Zeit damit verbracht, Beispielformate von JSESSIONID sowohl in Cookies als auch in URLs zu überprüfen und die HTTP-Header-Namen zu bestätigen. Ich fügte diese dann meinem Post hinzu, als ich sicher war, dass sie korrekt waren. Es ist nicht verwunderlich, dass Fragen wie diese ähnliche Antworten ergeben, aber wenn Sie sich immer noch benachteiligt fühlen, werde ich glücklich wählen, um meine Antwort zu löschen. – teabot

+1

@teabot: keine Sorgen; es ist alles gut. – RickNZ

2

Sitzungsverfolgung ist eine serverseitige Sache.

Ein Webserver gibt eine Sitzungskennung aus, die an den Browser zurückgegeben wird. Der Browser sendet diese Sitzungskennung zusammen mit jeder Anfrage.

Dies ist wahrscheinlich mit Cookies transparent für den Benutzer getan.

1

Die Sitzungsbehandlung wird in den meisten Fällen durch Senden einer cookie an den Client behandelt. Dieser Cookie wird bei jeder Anfrage von diesem bestimmten Client zurück an den Server gesendet.

Die session id wird mit einigen Ressourcen auf Server-Seite (Datei, RAM-Speicher), so dass der Server durch das Lesen der session id im Cookie zugeordnet werden wissen, diese Ressource finden und dann die Client es war.

9

Insbesondere, welcher Teil der HTTP Anfrage und Antwort würde für Session-Tracking verwendet werden?

In der HTTP-Antwort kann der Server einen Cookie setzen. Dies geschieht mit dem Set-Cookie-Header. Zum Beispiel:

Set-Cookie: session=12345; path=/ 

Der Kunde gibt dann den Wert aller Cookies, die die Eigenschaften übereinstimmen, die zusammen mit dem Cookie gesetzt wurden, der Pfad (wie oben) und Domäne umfassen kann und dass noch nicht abgelaufen.

Der Cookie wird als Teil der HTTP-Header an den Server gesendet. Zum Beispiel:

Cookie: session=12345 

Keine der ursprünglichen Eigenschafteninformationen werden mit dem Cookie zurückgesendet.

Ein eindeutiger Cookie ermöglicht es dem Server, einen eindeutigen Schlüssel einer bestimmten Browserinstanz zuzuordnen. Der Server kann diesen Schlüssel dann als Index in eine Hashtabelle oder eine Datenbanktabelle verwenden, die eindeutige Benutzerstatusinformationen enthält.

+0

das war wirklich hilfreich. danke .. – dexter

0

Finden genug Details here

HTTP-Sitzungen sind die empfohlene Vorgehensweise. Eine Sitzung identifiziert die Anfragen, die während des Gesprächs von demselben Browser stammen. Alle Servlets können sich dieselbe Sitzung teilen. JSESSIONID wird vom Server generiert und kann über Cookies, URL-Umschreiben (wenn Cookies deaktiviert sind) oder integrierte SSL-Mechanismen an den Client weitergegeben werden. Es sollte darauf geachtet werden, die Größe der in der Sitzung gespeicherten Objekte zu minimieren, und in der Sitzung gespeicherte Objekte sollten serialisierbar sein. In einem Java-Servlet kann die Sitzung wie folgt abgerufen werden:

HttpSession session = request.getSession(); // gibt aktuelle Sitzung oder eine neue Sitzung zurück

Sitzungen können abgelaufen sein (in web.xml konfiguriert) oder manuell ungültig gemacht werden.