Frage

Wenn / was sind die Bedingungen, wenn ein JSESSIONID erstellt wird?

Ist es pro eine Domain? Zum Beispiel, wenn ich einen Tomcat Applikationsserver, und ich implementieren mehrere Web-Anwendungen, wird eine andere JSESSIONID pro Kontext erstellt werden (Web-Anwendung), oder ist es für Web-Anwendungen gemeinsam genutzt, solange sie die gleiche Domain sind?

War es hilfreich?

Lösung

JSESSIONID Cookie wird erstellt / gesendet, wenn Sitzung erstellt wird. Session wird erstellt, wenn Sie den Code request.getSession() oder request.getSession(true) zum ersten Mal aufruft. Wenn Sie nur die Sitzung zu bekommen, aber es nicht schaffen, wenn es nicht, existiert request.getSession(false) verwenden - dies wird zurückkehren Sie eine Sitzung oder null. In diesem Fall wird neue Sitzung nicht erstellt, und JSESSIONID Cookie wird nicht gesendet. (Dies bedeutet auch, dass Sitzung ist nicht notwendigerweise auf erste Anforderung erstellt ... Sie und Ihr Code sind in der Steuerung , wenn die Sitzung erstellt wird)

Sessions sind pro-Kontext:

  

SRV.7.3 Session Scope

     

Http Objekte müssen scoped werden bei   die Anwendung (oder Servletkontext)   Niveau. Der zugrunde liegende Mechanismus, wie beispiels   wie das Cookie verwendet, um die zu etablieren   Sitzung kann das gleiche für andere sein   Kontexte, aber das Objekt verwiesen wird,   einschließlich der Attribute, dass   Objekt, darf nie zwischen geteilt werden   Kontexte durch den Behälter.

( Servlet 2.4-Spezifikation )

Update: Jeder Aufruf der JSP-Seite erstellt implizit eine neue Sitzung, wenn es noch keine Sitzung ist. Dies kann mit der session='false' Seite Richtlinie ausgeschaltet werden, wobei in diesem Fall Session-Variable auf JSP-Seite überhaupt nicht verfügbar ist.

Andere Tipps

Hier sind einige Informationen über eine weitere Quelle des JSESSIONID Cookie:

Ich habe nur das Debuggen einig Java-Code, der auf einem Tomcat-Server läuft. Ich rufe nicht explizit überall in meinem Code request.getSession() aber ich bemerkte, dass ein JSESSIONID Cookie wurde noch festgelegt werden.

Ich habe endlich einen Blick auf dem generierten Java-Code in eine JSP im Arbeitsverzeichnis unter Tomcat entspricht.

Es scheint, dass, ob Sie es wollen oder nicht, wenn Sie eine JSP aus einem Servlet aufrufen, wird JSESSIONID erstellt werden!

hinzugefügt: Ich fand nur, dass durch die folgende JSP-Richtlinie hinzufügen:

<%@ page session="false" %>

Sie die Einstellung von JSESSIONID durch eine JSP deaktivieren.

KORREKTUR: Bitte stimmen Sie für Peter Štibraný Antwort - es ist richtig und vollständig

!

A "JSESSIONID" ist die eindeutige ID der http-Sitzung - finden Sie in der javadoc hier . Dort werden Sie den folgenden Satz finden

  

Sitzungsinformationen scoped ist nur für den aktuellen Web-Anwendung (ServletContext), so Informationen in einem Kontext gespeichert werden in einem anderen nicht direkt sichtbar sein.

Also, wenn Sie zum ersten Mal einer Website treffen, wird eine neue Sitzung mit dem SevletContext erstellt und gebunden. Wenn Sie mehrere Anwendungen bereitstellen, wird die Sitzung nicht geteilt.

Sie können auch die aktuelle Sitzung ungültig machen und damit einen neuen erstellen. z.B. wenn von http auf https (nach Anmeldung) wechseln, es ist eine sehr gute Idee, um eine neue Sitzung zu erstellen.

Hope, Ihre Frage damit beantwortet.

Vorsicht, wenn Ihre Seite mit anderen .jsp oder .jspf (Fragmente)! Wenn Sie nicht gesetzt

<%@ page session="false" %>

auf sich als gut, die übergeordnete Seite wird eine neue Sitzung am Ende beginnen und die JSESSIONID Cookie zu setzen.

Für .jspf Seiten insbesondere, geschieht dies, wenn Sie Ihre web.xml mit einem solchen Schnipsel konfiguriert:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jspf</url-pattern>
    </jsp-property-group>
</jsp-config>

, um Scriptlets in ihnen zu ermöglichen.

in einer JSP-generierten Links mit benutzerdefinierten Tags, musste ich verwenden

<%@ page session="false" %>

in der JSP

und

request.getSession().invalidate();

in der Struts Aktion

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top