Inhalt | Abbildung | Source | SCWCD | |||
|< | < | > | >| | Generated by CoCoDiL |
Using session listeners, write code to respond to an event when an object is added to a session, and write code to respond to an event when a session object migrates from one VM to another. |
Es gibt zwei Listener Interfaces, die Objekte beobachten.
Die Listener Klasse muss in der Datei web.xml deklariert werden
In einer verteilten Umgebung kann eine Session von einer JVM zu einer anderen migrieren. Intern wird die alte Session deaktiviert, die neue aktiviert. Die Attribute der Session müssen serialisiert und zur neuen Session migriert werden. Ein HttpSessionActivationListener beobachtet ein Attribut, und führt die Methoden sessionWillPassivate() bzw. sessionWillActivate() aus kurz vor oder direkt nach der Migration aus.
Http ist ein zustandsloses Protokoll. Es ist ohne Tricks nicht möglich bei 2 verschiedenen Anfragen an den Server zu entscheiden, ob diese Anfragen vom selben Clienten kommen. Der Trick allgemein ist, bei der ersten Anfrage dem Clienten eine Sessionnummer zu geben, bei jeder weiteren Anfrage muss der Client diese Sessionnummer dem Server zeigen.
Es gibt folgende Möglichkeiten eine Sessionnummer zu vergeben, und weiterzuleiten.
Cookies
Cookies sind die einfachste und häufigste Methode, dem Clienten eine SessionId mitzugeben. Das Cookie muss den Namen JSESSIONID haben. Allerdings erlauben die meisten Browser dem Anwender das Speichern von Cookies abzuschalten.
SSL Sessions
Für den Austausch von sensiblen Daten sollte die Verschlüsselungstechnologie SSL (Secure Layer Socket) herangezogen werden, die von dem HTTPS-Protokoll verwendet wird. Sie bietet eingebaute Mechanismen, um eine Folge von Anfragen eindeutig einer Sitzung mit einem bestimmten Client zuzuordnen. Der Servlet-Container kann diese Daten verwenden, um eine Sitzung zu definieren und zu verwalten.
URL Rewrite
URL rewriting wird als Ersatz genommen, falls der Client Browser keine Cookies erlaubt. Die Idee ist einfach den sessionId an die URL anzuhängen. Der Name des Paramters heisst jsessionid. Beachte im Gegensatz zu den Cookies wird hier jessionid klein geschrieben.
Wenn man eine URL erzeugt muss garantiert sein, dass auch dort die SessionId angehängt wird. Dazu bietet das Interface in HttpServletResponse 2 Methoden:
Diese Methode gibt eine URL zurück, an der die sessionId angehängt ist.
Dies wird statt der sendRedirect() Methode genommen, wenn also die URL an eine andere Adresse umgeleitet wird.
Hier ein Code Beispiel:
Im Zusammenhang mit Session Management sind noch solche Methoden interessant:
Inhalt | Abbildung | Source | SCWCD | |||
|< | < | > | >| | Generated by CoCoDiL |