[java] 어떤 조건에서 JSESSIONID가 생성됩니까?

JSESSIONID만들 때의 조건은 언제 / 무엇 입니까?

도메인 당입니까? 예를 들어 Tomcat 앱 서버가 있고 여러 웹 응용 프로그램을 배포하는 JSESSIONID경우 컨텍스트 (웹 응용 프로그램)마다 다른 내용 이 만들어 지거나 동일한 도메인 인 한 웹 응용 프로그램간에 공유됩니까?



답변

세션이 생성 될 때 JSESSIONID 쿠키가 생성 / 전송됩니다. 세션은 코드 호출시 request.getSession()또는 request.getSession(true)처음 생성됩니다 . 세션을 가져 request.getSession(false)오고 싶지만 존재하지 않는 경우 세션을 만들지 않으려면 사용하십시오 null. 세션 또는를 반환합니다 . 이 경우 새 세션이 작성되지 않고 JSESSIONID 쿠키가 전송되지 않습니다. (이것은 또한 첫 번째 요청시 세션이 반드시 생성되는 것은 아니라는 것을 의미합니다 … 세션이 생성 되면 사용자와 코드가 제어 됩니다 )

세션은 상황에 따라 다릅니다.

SRV.7.3 세션 범위

HttpSession 오브젝트는 애플리케이션 (또는 서블릿 컨텍스트) 레벨에서 범위를 지정해야합니다. 세션을 설정하는 데 사용되는 쿠키와 같은 기본 메커니즘은 다른 컨텍스트에서 동일 할 수 있지만 해당 오브젝트의 속성을 포함하여 참조 된 오브젝트는 컨테이너가 컨텍스트간에 공유하지 않아야합니다.

( 서블릿 2.4 사양 )

업데이트 : JSP 페이지에 대한 모든 호출은 아직 세션이없는 경우 암시 적으로 새 세션을 만듭니다. session='false'JSP 페이지에서 세션 변수를 전혀 사용할 수없는 경우 페이지 지시문 으로이를 해제 할 수 있습니다 .


답변

하나 이상의 JSESSIONID쿠키 소스에 대한 정보는 다음과 같습니다 .

Tomcat 서버에서 실행되는 Java 코드를 디버깅하고있었습니다. request.getSession()내 코드의 어느 곳에서나 명시 적으로 호출하지 않았지만 JSESSIONID쿠키가 여전히 설정되어 있음을 알았습니다 .

마지막으로 Tomcat의 작업 디렉토리에서 JSP에 해당하는 생성 된 Java 코드를 살펴 보았습니다.

서블릿에서 JSP를 호출하면 원하는지 여부에 관계없이 JSESSIONID생성됩니다!

추가 : 다음 JSP 지시문을 추가하여 방금 발견했습니다.

<%@ page session="false" %>

JSESSIONIDJSP 에 의한 설정을 비활성화 할 수 있습니다 .


답변

정정 : Peter Štibraný의 답변에 투표하십시오-더 정확하고 완전합니다!

“JSESSIONID”는 http 세션의 고유 ID입니다 . 여기에서 javadoc을 참조하십시오 . 거기에 다음 문장이 있습니다.

세션 정보는 현재 웹 응용 프로그램 (ServletContext)에만 적용되므로 한 컨텍스트에 저장된 정보는 다른 컨텍스트에 직접 표시되지 않습니다.

따라서 처음 사이트를 방문하면 새 세션이 만들어지고 SevletContext에 바인딩됩니다. 여러 응용 프로그램을 배포하면 세션이 공유되지 않습니다.

현재 세션을 무효화하여 새 세션을 생성 할 수도 있습니다. 예를 들어, 로그인 후 http에서 https로 전환 할 때 새 세션을 만드는 것이 좋습니다.

희망, 이것은 귀하의 질문에 대답합니다.


답변

페이지에 다른 .jsp 또는 .jspf (조각)가 포함되어 있으면주의하십시오! 설정하지 않으면

<%@ page session="false" %>

부모 페이지에서도 새 세션을 시작하고 JSESSIONID 쿠키를 설정하게됩니다.

특히 .jspf 페이지의 경우 이러한 스 니펫으로 web.xml을 구성한 경우에 발생합니다.

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

내부에 스크립틀릿을 활성화합니다.


답변

사용자 정의 태그를 사용하여 JSP에서 생성 된 링크의 경우

<%@ page session="false" %>

JSP에서

request.getSession().invalidate();

Struts 액션에서


답변