세션 제한 시간 혼동 - Session.SetMaxInactiveInterval (0)
-
26-12-2019 - |
문제
나는 jee의 새로운 것이고 이것은 나를 혼란스럽게하는 것입니다. httpsession.html # setMaxInctiveInterval. (int 간격) 설명서
interval
의zero
값 이하는 세션이 제한 시간이 아닌 시간 초과되지 않아야 함을 나타냅니다.
그러나 내 텍스트 책 (이미 몇 년 오래된 몇 년이 지나야합니다. 그래서 항상 제 0을 사용하여 항상 옳지 않을 것으로 기대합니다) 즉시 제한 시간을 초래할 수 있습니다.
이 코드
public class Test extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.setAttribute("foo", 42);
session.setMaxInactiveInterval(0);
out.println(session.getAttribute("foo"));//problem here
}
}
.
GlassFish 4.0에서 사용되는 http status 500 - 내부 서버 오류 을 오류 메시지
로 반환하기 때문에 새로운 공식 문서 대신 교과서에서 이론을 확인하는 것으로 보입니다.
java.lang.IllegalStateException: getAttribute: Session already invalidated
여기서 뭐하고 있니? 이 GlassFish 4.0 버그 또는 문서가 잘못 되었습니까? 아니면 세 번째 옵션이 있습니까?
ps. 이 코드는 음수 값 (세션이 무효화되지 않음)과 함께 작동하며 코드에서 -1
대신 0
를 사용하고 있습니다. 0
가 잘못된 것만 끊임없이 관심이 있습니다.
해결책
Servlet Specification 챕터 세션 시간 초과 상태
정의에 따라 세션의 시간 초과 기간이 -1로 설정된 경우 세션은 절대로 만료되지 않습니다.
그래서 glasshhish는 그것을 덮은 것으로 보인다. 0
가있는 setMaxInactiveInterval()
값의 값에 대해서도 동일해야한다고 말하는 사양에 대한 참조를 찾을 수 없습니다. 그러나
session-config
이 웹의 세션 매개 변수를 정의합니다. 신청. 하위 요소session-timeout
는 기본값을 정의합니다 이 웹에서 생성 된 모든 세션에 대한 세션 시간 초과 간격 신청. 지정된 시간은 전체적으로 표현되어야합니다. 시간 수. 시간 초과가 0 이하이거나 강하면 컨테이너가 보장합니다. 세션의 기본 동작은 절대로 시간이 아닙니다. 이 요소 인 경우 지정되지 않으면 컨테이너가 기본 시간 초과 기간을 설정해야합니다.
다른 팁
이것은 이미 시간 초과되고 무효화됩니다
session.setMaxInactiveInterval(0); // mean inactive immediately
.
이는 올바른 오류 메시지입니다.(추가 참조를 위해 헤드 첫 번째 책을 참조하십시오.)
존재하지 않는 객체 값에 액세스하려고합니다.이미
파괴되었습니다