Web

Servlet (3) - Cookie

Servlet (3)

쿠키(Cookie)

  1. 쿠키의 개념과 처리방식
    다양한 웹 서비스 중에 클라이언트 단위로 상태정보를 유지해야 하는 경우 세션을 사용한다. 쿠키는 클라이언트 측에 텍스트 타입으로 데이터가 저장되며 세션은 서버 측에 객체 타입으로 데이터가 저장된다는 차이가 있다. 또한, 쿠키로 저장할 수 있는 데이터의 크기는 제한이 있지만, 세션은 서버가 수용할 수 있는 만큼 데이터를 저장할 수 있다.
  • 쿠키란?
    쿠키란 웹 서버에서 적은 양의 정보를 웹 브라우저에게 보내고, 웹 브라우저는 그 정보를 저장하고 있다가, 나중에 다시 이 웹페이지를 방문할 때 웹 서버에세 제출하도록 하는 것.
    이러한 쿠키는 일반적으로 세션 관리를 위해 사용됨.
    쿠키는 이름과 그 이름에 해당하는 하나의 값을 가지고 있으며, 설명(comment), 경로와 도메인 구분자(path and domain qulifiers), 유효기간(maximum age), 그리고 버전(version number)등과 같은 추가적인 속성을 가질 수 있음.
    쿠키는 다음과 같은 처리방식을 통해 생성/저장 됨.
  1. 클라이언트의 요청에 따라 웹 서버는 클라이언트에게 응답을 통해 쿠키를 부여.
  2. 쿠키가 사용자의 디스크나 웹 브라우저 메모리에 저장
  3. 사용자가 쿠키를 부여 받은 웹 사이트를 다시 요청할 때, 쿠키가 전송되며 웹 서버는 해당 쿠키를 통해 클라이언트를 구별.
  • HttpServletResponse 객체의 addCookie() 메소드를 이용하여 웹 브라우저에게 쿠키를 보낼 수 있음.
  • 이때, HttpServletResponse 객체의 addCookie()메소드는 웹 브라우저에게 쿠키를 보내기 위해 한 번에 한 개씩 HTTP응답 헤더 (Http resonse headers)에 필드를 추가하게 됨.
  • 브라우저는 각 웹 서버당 20개의 쿠키를 지원. (이는 적어도 4KB정도의 크기)
  • 브라우저는 HTTP 요청 헤더(HTTP reqeust headers)에 쿠키 항목을 추가함으로써 서블릿에게 쿠키를 보내게 됨.
    이 때, 서블릿은 ㄷ이 쿠키들을 가져오기 위해서는 HttpServlet Request 객체의 getCookies(), 메소드를 사용할 수 있음.
  1. 쿠키의 생성 및 추출
    쿠키의 생성
    1
    2
    3
    4
    5
    6
    7
    8
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            // Cookie 생성 
            Cookie cookie = new Cookie("name"new Date().toString());
            
            // 생성된 cookie를 응답 데이터에 추가 
            response.addCookie(cookie);
        }
    cs

  • 쿠키의 유효시간 설정
    setMaxAge() 메소드를 통해 쿠키의 유효시간 설정.
  • 1과 같은 음수값으로 지정하거나, 또는 디폴트 값을 사용하면 사용자가 브라우저를 닫는 순간 부여 받은 쿠키를 지우도록 하는 것이고,
    쿠키의 유효시간을 0으로 설정하면 당장 쿠키를 지우도록 하는 것.
    쿠키의 유효기간을 특정 값으로 설정하면 해당 시간만큼 쿠키가 유효하게 됨.
    이 때, 설정할 수 있는 쿠키의 유효기간 단위는 초 단위.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // Cookie 생성 
        Cookie cookie = new Cookie("name"new Date().toString());
        
        //365일 = 365 * 24시간/일 * 3600초/시
        cookie.setMaxAge(365*24*3600);
        
        // Cookie의 시간을 0으로 설정하면 즉시 Cookie가 삭제된다. 
        cookie.setMaxAge(0);
        
        // 생성된 cookie를 응답 데이터에 추가 
        response.addCookie(cookie);
    }
cs

쿠키의 추출
1
2
3
4
5
6
7
8
9
10
11
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //request 객체로부터 전송된 모든 쿠키를 저장한다.
        Cookie[] cookies = request.getCookies();
        
        //쿠키의 이름과 값을 얻어온다. 
        if(cookies != null && cookies.length >0) {
            for(int i=0; i<cookies.length; i++) {
                System.out.println( cookies[i].getName() + cookies[i].getValue());
            }
        }
  }
cs

'Web' 카테고리의 다른 글

JSP (2) - Directive Tag(지시자 태그)  (0) 2019.09.29
JSP (1)  (0) 2019.09.29
Servlet (4) - Session  (0) 2019.09.28
Servlet (2)  (0) 2019.09.28
Servlet (1)  (0) 2019.09.28