ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [헤드퍼스트 Servlet&JSP] 6. 세션관리
    개발입문 2017. 2. 17. 11:31




    다중 요청간 고객과의 대화기록 유지

    가령 고객의 장바구니 목록을 (로그인 없이도) 오른쪽날개에 제공할 수 있다면.


    학습목표

    1. 세션 객체에 객체를 저장하거나 또는 읽어올 수 있는 서블릿 코드를 작성할 수 있어야 합니다.

    2. 세션 객체 생성 ~ 제거

    3. 세션 리스너: 이벤트 반응

    4. 쿠키, 세션, URL재작성


    HttpSession 객체

    클라이언트가 세션이 유지되는 동안 보낸 모든 요청으로부터 얻은 정보를 여기에 저장

    ㄴ 대안: 상태유지 세션빈 (상태유지 EJB), 데이터베이스


    컨테이너는 클라이언트를 어떻게 구분하지?

    HTTP 프로토콜은 무상태 (stateless) 연결인걸?

    ㄴ 클라이언트는 유일한 세션ID가 필요하다
    ㄴ 웹 컨테이너는 세션ID 쿠키를 심어놓는다.
    Set-Cookie: JSESSIONID=0AAB6C8DE415





    세션 쿠키 작업

    Response 객체에 세션 쿠키를 심을 때에도- Request 객체로부터 심은 쿠키를 가져올 때에도- Session 은 Request에 의해 식별됩니다. 쿠키는 디폴트로 세션과 생존범위가 같습니다.
    (브라우저를 중지하면 사라집니다. 기본적으로는)

    HttpSession session = request.getSession()

    getSession(false)
    이건 세션 정보를 꼭 활용해야할 때 (세션 생성불가)


    4. 쿠키를 거절하는 클라이언트는?
    URL 재작성

    Set-Cookie Response 헤더를 무시합니다. 백업으로 URL 재작성 기능을 사용합니다. URL 재작성은 세션 ID 정보를 모든 URL 뒤에 추가하는 방법! 컨테이너는 들어온 URL 끝에서 세션 ID 정보를 잘라내어, 매칭되는 세션 정보를 서로 연결하기만 하면 됩니다.

    Request
    <a href="http://www.jsp.com/BeerTest.do;jessionid=0AAB6C8DE415">click</a>

    Response
    GET /BeerTest.do;jsessionid=0AAB6C8DE415


    5. 세션을 여러 컴포넌트가 사용하고 싶다면?
    URL 재작성 with 인코딩

    사용자로부터 들어온 요청을 다른 서블릿이나 JSP로 보내고(redirect)하고 싶은데, 세션은 계속해서 유지하고 싶을 때-

    response.encodeRedirectURL("/BeerTest.do")
    response.eoncodeURL("/BeerTest.do")

    URL 재작성은 우선 동적 웹페이지여야만 합니다. (세션 ID 하드코딩 불가하므로)


    세션을 다룰 전략
    세션 라이프사이클 (생명주기)

    불필요한 세션을 식별해, 제거해야합니

    특정 세션만 타임아웃 설정
    session.setMaxInactiveInterval(20*60);


    DD에서 모든 세션 타임아웃 설정하기

    <session-config>
        <session-timeout>15</session-timeout>
    </session-config>

    HttpSession Docs

    http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSession.html



    드디어 광고 타겟팅을 빼려면 쿠키를 빼세요! 라는 바보같은(?) 소리의 정체를 알았다!
    쿠키를 가져가서 DB에만 저장하지 않는다면... 크게 문제없는데

    그리고 DB에 정리해도.. 어떤 목적으로 활용하기 전까지는 상관없는데.. 활용해도.. 개인 (어디사는 몇살의 누구) 이 식별되지만 않는다면 괜찮은데... 너무 많은 걱정들을 달고 사는게 아닌지- 나름 타겟팅해놓으면 도움 될때도 있는데 (광고주에게도 유저에게도 도움을 주고 싶은건데 ㅜ ㅜ )

    일단 내용이 너무 많으니 여기서 끊어가야지! (후... 후... @_@ !! )
    세션 관련 이벤트에 대한 리스닝은 다음 포스트에서!

    http://haloaround.tistory.com/83



    '개발입문' 카테고리의 다른 글

    Web 개념  (0) 2017.01.30

    댓글

Designed by Tistory.