를 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" %>
JSESSIONID
JSP 에 의한 설정을 비활성화 할 수 있습니다 .
답변
정정 : 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 액션에서