2012-01-13 3 views
1

javax.servlet.http.HttpSession의 설명서에 혼란 스럽습니다.
은 말한다 :세션 개체 동작을 이해할 수 없습니다.

세션 여러 페이지 요청에서 상태 및 사용자의 신원을 유지하는 데 사용됩니다. 쿠키는 URL 재 작성을 통해 을 사용하여 세션을 유지 관리 할 수 ​​있습니다.

이제 쿠키와 URL 재 작성 모두 서버의 응용 프로그램 코드 (예 : 코드)에 의해 처리됩니다.

는 그런 다음 세션이 new로 간주되는 경우에 관한 말한다 :

서버는이 클라이언트가 합류 할 때까지 세션이 새 것으로 간주합니다. 클라이언트가 세션이 세 가지 사례 중 하나를 표시 할 수 있습니다 사실의 true.A 값을 반환 isNew 방법을 조인까지 :
1. 클라이언트가 아직 세션
2. 세션에 대해 알고하지 않습니다 아직
을 시작되지 않은 3. 클라이언트가 세션에 참가하지 않도록 선택합니다. 이 경우는 클라이언트가 쿠키 만 지원하고 서버가 보낸 쿠키 을 거부하도록 선택하면 발생합니다. 서버가 URL 재 작성을 지원하는 경우이 경우 은 일반적으로 발생하지 않습니다.

내가 생각할 때 명확하지 않거나/client has joined the session을 의미합니다.

내가 (재 작성 또는 URL) 내 웹 응용 프로그램에서 쿠키를 사용하지 않는 경우 내 말은 내가 다음과 같습니다에 서버에서 서버 확인을

  • 200 IP A로부터

    1. POST IP A로부터 서버에
    2. POST 3 단계에서

    것이다 true 또는 false를 session.isNew() 복귀? 나는 의사에게 분명하지 않다.
    새 세션을 만들려면 false가 반환됩니다 (즉, 세션이 새로운 것이 아닙니다) session.invalidate()에 전화해야합니까?
    클라이언트가 HTTP 응용 프로그램이지만 웹 브라우저가 아닌 코드 조각을 디버깅 중이므로 3 단계에서 session.isNew()이 쿠키 또는 URL 재 작성이 없어도 true을 반환하지 않는다는 것을 알기 때문에 더 혼란스러운 이유가 있습니다. 서버 코드에서.
    그래서 나는 두포에서 무슨 일이 일어나는지 알 수 없다.
    이것을 이해하는 데 도움이되는 정보는 무엇입니까?

  • +2

    쿠키에 대해 혼란스러워합니다. 서블릿 컨테이너가 응답에 세션 쿠키를 추가하고 요청에서 읽습니다. 아무 것도 할 필요가 없습니다. 클라이언트 브라우저가 쿠키를 허용하지 않으면 URL 재 작성이 자동으로 사용되며 인코딩 된 URL (encodeURL, encodeRedirectURL 또는 해당 JSP 태그 포함)을 항상 제공하는 경우 작동합니다. –

    +0

    @ JB Nizet : HTTP가 무 상태라고 생각했습니다. 세션을 유지하는 것은 프로그래머에게 달려 있습니다. 어쨌든 컨테이너로 세션이 있다고 나에게 말하고 있습니까? – Cratylus

    +2

    컨테이너에 request.getSession() 또는 request.getSession (true)를 사용하여 세션을 만들도록 요청하면 컨테이너는 클라이언트에 전송 된 다음 응답에 세션 쿠키를 추가하고 세션 URL을 인코딩 된 URL에 추가합니다). 다음 요청 (또는 URL 끝에있는 세션 ID)에서 쿠키를 받으면 이전에 생성 된 세션에 요청을 연결할 수 있습니다. 클라이언트가 쿠키를 허용하지 않으면 URL 인코딩을 제외하고는 아무 것도 할 필요가 없습니다. 세션 추적 및 시간 초과는 컨테이너에 의해 수행됩니다. –

    답변

    3

    다음은 클라이언트가 이후의 요청 및 웹 서버에 의해 인식 될 수 포함 세션 ID를 만든 것을 의미 Session Tracking

    Client has joined the session의 좋은 예입니다. 쿠키가 사용 설정된 경우 - jsessionid은 쿠키와 함께 전달되며 그렇지 않은 경우 URL 자체에 포함되어야합니다 (예 : http://localhost:8080/bookstore1/cashier;jsessionid=c0o7fszeb1).

    코어 태그 라이브러리의 에서 URL 재 작성을 처리합니다.

    B2B 통신의 경우 세션 ID를 직접 가져 와서 후속 요청에 수동으로 포함시켜야합니다.

    예 :

  • A가 상기 응답에서 session id를 획득 서버 IP A로부터

    1. POST
    2. 200 OK 서버에
    3. 는 서버 IP A로부터
    4. POST가 얻어진 포함 session id

    UPDATE :

    은 훌륭한 기사를 읽고 고려 - "Web Based Session Management: Best practices in managing HTTP-based client sessions." 그것은 에뮬레이트 할 수 있으며, 자바에 연결되지 않은 방법 HTTP 세션에 대한 일반적인 개요입니다.

  • +0

    'jsessionid' 자바는 특정하지 않습니까? – Cratylus

    +0

    네, 자바와 관련이 있습니다. 일부 서버는이 이름을 구성 할 수 있지만 JavaEE 호환 서버는이 이름을 사용해야합니다. – yatskevich

    +0

    하지만 내가 사용하고있는 클라이언트가 Java가 아닙니다. – Cratylus

    관련 문제