JSESSIONID-Cookie wird beim Erstellen der Sitzung erstellt / gesendet. Die Sitzung wird erstellt, wenn Ihr Code aufruft request.getSession()
oder request.getSession(true)
zum ersten Mal. Wenn Sie die Sitzung nur abrufen, aber nicht erstellen möchten, wenn sie nicht vorhanden ist, verwenden Sie request.getSession(false)
- dies gibt Ihnen eine Sitzung zurück oder null
. In diesem Fall wird keine neue Sitzung erstellt und kein JSESSIONID-Cookie gesendet. (Dies bedeutet auch, dass die Sitzung nicht unbedingt auf erste Anfrage erstellt wird . Sie und Ihr Code haben die Kontrolle, wenn die Sitzung erstellt wird.)
Sitzungen sind kontextbezogen:
SRV.7.3 Sitzungsumfang
HttpSession-Objekte müssen auf Anwendungs- (oder Servlet-Kontextebene) einen Gültigkeitsbereich haben. Der zugrunde liegende Mechanismus, wie z. B. das zum Einrichten der Sitzung verwendete Cookie, kann für verschiedene Kontexte gleich sein, das referenzierte Objekt, einschließlich der Attribute in diesem Objekt, darf jedoch vom Container niemals zwischen Kontexten geteilt werden.
( Servlet 2.4-Spezifikation )
Update: Jeder Aufruf der JSP-Seite erstellt implizit eine neue Sitzung, wenn noch keine Sitzung vorhanden ist. Dies kann mit der session='false'
Seitenanweisung deaktiviert werden. In diesem Fall ist die Sitzungsvariable auf der JSP-Seite überhaupt nicht verfügbar.
request.getSession()
oder anrufenrequest.getSession(true)
, erhalten Sie entweder eine vorhandene oder eine neue Sitzung. Wenn Ihr Code jedoch aufruftrequest.getSession(false)
, erhalten Sie entweder eine vorhandene Sitzung oder null, wenn keine Sitzung vorhanden ist.Hier einige Informationen zu einer weiteren Quelle des
JSESSIONID
Cookies:Ich habe gerade Java-Code debuggt, der auf einem Tomcat-Server ausgeführt wird. Ich habe
request.getSession()
nirgendwo in meinem Code explizit angerufen, aber ich habe festgestellt, dass noch einJSESSIONID
Cookie gesetzt wird.Schließlich habe ich mir den generierten Java-Code angesehen, der einer JSP im Arbeitsverzeichnis unter Tomcat entspricht.
Es scheint, dass, ob Sie es mögen oder nicht, wenn Sie eine JSP von einem Servlet aufrufen,
JSESSIONID
, erstellt wird!Hinzugefügt: Ich habe das gerade durch Hinzufügen der folgenden JSP-Direktive gefunden:
Sie können die Einstellung
JSESSIONID
durch eine JSP deaktivieren .quelle
KORREKTUR: Bitte stimmen Sie für die Antwort von Peter Štibraný - sie ist korrekter und vollständiger!
Eine "JSESSIONID" ist die eindeutige ID der http-Sitzung - siehe Javadoc hier . Dort finden Sie den folgenden Satz
Wenn Sie also zum ersten Mal eine Site aufrufen, wird eine neue Sitzung erstellt und an den SevletContext gebunden. Wenn Sie mehrere Anwendungen bereitstellen, wird die Sitzung nicht freigegeben.
Sie können auch die aktuelle Sitzung ungültig machen und daher eine neue erstellen. Wenn Sie beispielsweise von http zu https wechseln (nach dem Anmelden), ist es eine sehr gute Idee, eine neue Sitzung zu erstellen.
Hoffe, das beantwortet deine Frage.
quelle
Passen Sie auf, wenn Ihre Seite andere .jsp oder .jspf (Fragment) enthält! Wenn Sie nicht einstellen
Auch auf ihnen startet die übergeordnete Seite eine neue Sitzung und setzt das JSESSIONID-Cookie.
Dies gilt insbesondere für .jspf-Seiten, wenn Sie Ihre web.xml mit einem solchen Snippet konfiguriert haben:
um Scriptlets in ihnen zu aktivieren.
quelle
Für Links, die in einer JSP mit benutzerdefinierten Tags generiert wurden, musste ich verwenden
in der JSP
UND
in der Struts-Aktion
quelle