JSP 페이지 세션 = "false"지시문을 설정하는 이유는 무엇입니까?
JSP에서 다음 페이지 지시문을 언제 설정할지 궁금합니다.
<%@ page session="false" %>
세션 개체 생성을 막는다는 것을 알고 있지만 언제 그렇게해야합니까? JSP가 암시 적 세션에 액세스 할 필요가없는 경우 모범 사례로 간주됩니까?
참고 : 이이 스프링 MVC 튜토리얼에 있었고, 나는 스프링 소스의 사람들이 자신의 물건을 알고 있다고 가정하기 때문에 물어 이유는,이다 - http://blog.springsource.com/2011/01/04/green-beans-getting-started -봄 -mvc /
한 가지 이유는 성능 과 메모리 입니다. 세션에 포함 할 필요가없는 페이지 (예 : an about.jsp
또는 faq.jsp
)가있는 경우 세션의 모든 JSP를 포함하는 기본 동작은 새 세션 개체를 만드는 오버 헤드를 부과합니다 (그렇지 않은 경우). 이미 존재 함) 힙에 더 많은 오브젝트가 상주함에 따라 메모리 사용량이 증가했습니다.
이 효과는 단일 페이지에서 많은 순 사용자로부터 높은 트래픽이 높은 이탈률과 결합 된 경우 크게 과장됩니다. 즉, 사용자가 탐색을 계속하지 않고 해당 페이지를 본 직후 사이트를 떠나는 경우 컨테이너가 새로운 사용자 당 세션 개체는 다시 사용되지 않으며 시간이 초과되면 궁극적으로 가비지 수집됩니다. 실제 값을 제공하지 않고 개체 생성, 메모리 사용 및 가비지 수집에 추가됩니다.
이 설정은 잠재적 인 DoS 공격을 방지하기 때문에 보안 조치이기도합니다 . 반복적으로 그 간단한 스크립트에 대해 생각 wgets 는 JSP를 : 그것은 몇 초에서 세션을 많이 생성합니다.
실제로 내 앱에는 사용에 대한 실제 시나리오가 있습니다. 우리는 응용 프로그램 앞에서 역방향 프록시 역할을하는 Squid를 가지고 있습니다. squid 서버는 애플리케이션을 호스팅하는 모든 tomcat 인스턴스를 폴링하도록 설정되어 서버가 실행되고 있는지 확인합니다. 그렇지 않은 경우 Squid는 클러스터의 다른 서버를 사용하도록 장애 조치됩니다.
Squid에서 앱에 대한 실제 폴링은 앱의 특정 페이지를 폴링하도록 설정됩니다. Squid의 설문 조사는 실제로 브라우저가 아니기 때문에 세션을 보유 할 수 없습니다. 즉, 서버 페이지에 대한 각 설문 조사는 Squid가 참조를 보유 할 수없는 세션을 생성해야합니다. <%@ page session="false" %>
각 투표에서 세션이 생성되지 않도록 지시문을 추가합니다 . 이 지시문을 사용하지 않으면 아무런 이유없이 4 시간 동안 수천 개의 세션이 생성됩니다.
실제로이 지시문을 추가해야하는 또 다른 사용 사례 noSessionCreation
는 .ini
구성 파일 에서 Apache Shiro의 필터를 사용할 때입니다 . 예를 들어 인증 체계가 상태 비 저장이기 때문입니다. 부족하면 org.apache.shiro.subject.support.DisabledSessionException
.
내 프로덕션 애플리케이션에서 다른 사용 사례를 살펴 보았고 누군가에게 도움이 될 경우 여기에서 공유 할 것이라고 생각했습니다.
세션을 통해 대부분의 리소스를 보호하는 웹 UI 앱이 있습니다. 그러나 일부 리소스는 프로덕션 배포에서 앱 앞에있는 웹 계층의 일부로 보호됩니다. 따라서 앱에 관한 한 이러한 리소스는 완전히 보호되지 않습니다. 이러한 "보호되지 않는"자원 중 일부는 JSP입니다.
사용자가 보호 된 리소스 중 하나에 세션을 설정 한 다음 브라우저에서 "보호되지 않은"리소스 중 하나로 XHR 호출을하는 경우 컨테이너가 익명 사용자가 액세스를 시도한다고 주장하는 문제에 부딪 혔습니다. 사용자 foo 의 세션으로 실행이 중지됩니다. 세션을 사용하지 않도록 "보호되지 않은"JSP를 구성하여이 문제를 해결했습니다.
참고 URL : https://stackoverflow.com/questions/5515729/why-set-a-jsp-page-session-false-directive
'Nice programing' 카테고리의 다른 글
폴터 가이스트 / PhantomJS와 카피 바라 웹킷은 어떻게 다릅니 까? (0) | 2020.12.04 |
---|---|
Young, Tenured 및 Perm 세대 (0) | 2020.12.04 |
스프링 보안의 SecurityContextHolder : 세션 또는 요청 바인딩? (0) | 2020.12.04 |
java.sql에 해당하는 datetime? (0) | 2020.12.04 |
MSVCP140.dll 누락 (0) | 2020.12.03 |