HttpSession session = req.getSession(); // wenn keine Session da ist wird eine erzeugt HttpSession session = req.getSession(true); // wenn keine Session da ist wird eine erzeugt HttpSession session = req.getSession(false); // gibt die Session oder null, wenn keine da ist
Arbeiten mit Sessionattributen:
Object o = session.getAttribute("name"); Enumeration e = session.getAttributeNames(); : session.setAttribute("name", object); :Die isNew Eigenschaft einer Session:
session.isNew(); // true, wenn die Session dem Client nicht per Cookie // bekannt ist (weil der Cookie noch nicht gesendet wurde // oder weil der CLient keine Cookies akzeptiertVerwerfen einer Session
session.invalidate(); // beendet die Session session.setMaxInactiveIntervall(0); // beendet die Session nach 0 Sekunden, also sofortAngabe des Sessiontimeout im DD:
<session-config> <session-timeout>15</session-timeout> // in Minuten, negative Werte: niemals Timeout </session-config>Übrigens bedeutet das Verwerfen einer Session mit den genannten Methoden nicht (notwendig), dass die Session-Instanz verworfen wird. Lediglich das Binding aller nutzerspezifischen Daten wird aufgehoben. Wird eine neue Session benötigt kann der Container die alte Instanz wiederverwenden, muss er aber nicht. Da das Verwalten von Sessions eine aufwändige Angelegenheit ist, hat die Spezifikation diese Freiheit zugelassen.
Beim Sessionmanagement mit Cookies enthält der Cookie "JSESSIONID" die ID der Session, damit kann serverseitig für jeden Request dem Nutzer seine Session zugeordnet werden. Voraussetzung ist, dass der Nutzer in seinem Browser Cookies erlaubt. Tut er das nicht, dann wird automatisch Sessionmanagement mit URL Rewriting betrieben. Hier muss die ID der Session an jeden Request und an jede POST Action angehängt werden. Dafür stellt die Container API zwei Methoden bereit:
resp.encodeURL("/foo/bar.do"); // bei redirect resp.encodeRedirectURL("/foo/bar.do");Es sei denn man kann durch betriebliche Maßnahmen sicherstellen, dass die Nutzer Cookies aktivieren, bedeutet das in der Praxis: jede URL auf allen Seiten die im Kontext einer Session laufen muss mit resp.encodeURL / resp.encodeRedirectURL in diese Seiten eingebaut werden. Das gilt dann leider auch für Seiten, die an sich "statisch" sind!
Änderungen am Lifecycle der Session oder ihrer Attribute können mit HTTPSessionListener überwacht werden.