Plik cookie JSESSIONID jest tworzony / wysyłany podczas tworzenia sesji. Sesja jest tworzona przy pierwszym wywołaniu kodu request.getSession()
lub request.getSession(true)
po raz pierwszy. Jeśli chcesz tylko uzyskać sesję, ale nie utworzyć jej, jeśli nie istnieje, użyj request.getSession(false)
- spowoduje to zwrócenie sesji lub null
. W takim przypadku nowa sesja nie jest tworzona, a ciasteczko JSESSIONID nie jest wysyłane. (Oznacza to również, że sesja nie musi być utworzony na pierwsze żądanie ... Ty i Twój kod są pod kontrolą , gdy sesja jest tworzony)
Sesje są dostosowane do kontekstu:
SRV.7.3 Zakres sesji
Obiekty HttpSession muszą mieć zasięg na poziomie aplikacji (lub kontekstu serwletu). Mechanizm bazowy, taki jak plik cookie użyty do ustanowienia sesji, może być taki sam dla różnych kontekstów, ale obiekt, do którego się odwołuje, w tym atrybuty w tym obiekcie, nigdy nie może być współużytkowany przez konteksty przez kontener.
( Specyfikacja Servlet 2.4 )
Aktualizacja: każde wywołanie strony JSP domyślnie tworzy nową sesję, jeśli jeszcze jej nie ma. Można to wyłączyć za pomocą session='false'
dyrektywy strony, w którym to przypadku zmienna sesji nie jest w ogóle dostępna na stronie JSP.
request.getSession()
lubrequest.getSession(true)
, uzyskasz istniejącą lub nową sesję. Jednak jeśli twój kod wywołujerequest.getSession(false)
, to albo masz istniejącą sesję, albo zerową, jeśli nie istnieje żadna sesja.Oto informacje o jeszcze jednym źródle
JSESSIONID
pliku cookie:Właśnie debugowałem jakiś kod Java, który działa na serwerze tomcat.
request.getSession()
Nigdzie nie dzwoniłem jawnie w kodzie, ale zauważyłem, żeJSESSIONID
plik cookie wciąż jest ustawiony.W końcu przyjrzałem się wygenerowanemu kodowi Java odpowiadającemu JSP w katalogu roboczym pod Tomcat.
Wygląda na to, że niezależnie od tego, czy ci się spodoba, czy nie, jeśli wywołasz JSP z serwletu,
JSESSIONID
zostanie utworzony!Dodano: Właśnie to znalazłem, dodając następującą dyrektywę JSP:
możesz wyłączyć ustawienie
JSESSIONID
JSP.źródło
KOREKTA: Głosuj na odpowiedź Petera Štibranego - jest bardziej poprawna i kompletna!
„JSESSIONID” to unikalny identyfikator sesji http - patrz javadoc tutaj . Tam znajdziesz następujące zdanie
Więc kiedy pierwszy raz odwiedzasz witrynę, tworzona jest nowa sesja i powiązana z SevletContext. W przypadku wdrożenia wielu aplikacji sesja nie jest udostępniana.
Możesz także unieważnić bieżącą sesję, a tym samym utworzyć nową. np. przy przejściu z http na https (po zalogowaniu), bardzo dobrym pomysłem jest utworzenie nowej sesji.
Mam nadzieję, że to odpowiada na twoje pytanie.
źródło
Uważaj, jeśli Twoja strona zawiera inne pliki .jsp lub .jspf (fragment)! Jeśli nie ustawisz
również na nich strona nadrzędna rozpocznie nową sesję i ustawi plik cookie JSESSIONID.
W szczególności w przypadku stron .jspf dzieje się tak, jeśli plik web.xml został skonfigurowany za pomocą takiego fragmentu:
aby włączyć w nich skryptlety.
źródło
W przypadku linków wygenerowanych w JSP z niestandardowymi tagami musiałem użyć
w JSP
I
w akcji Struts
źródło