문제

나는 jee의 새로운 것이고 이것은 나를 혼란스럽게하는 것입니다. httpsession.html # setMaxInctiveInterval. (int 간격) 설명서

intervalzero 값 이하는 세션이 제한 시간이 아닌 시간 초과되지 않아야 함을 나타냅니다.

그러나 내 텍스트 책 (이미 몇 년 오래된 몇 년이 지나야합니다. 그래서 항상 제 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
.

이는 올바른 오류 메시지입니다.(추가 참조를 위해 헤드 첫 번째 책을 참조하십시오.)

존재하지 않는 객체 값에 액세스하려고합니다.이미

파괴되었습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top