본문 바로가기
Web

쿠키(Cookie) with JSP

by 융식 2023. 6. 21.

쿠키

쿠키(Cookie)는 클라이언트의 상태와 정보를 유지하기 위한 기술입니다.
상태 정보를 클라이언트(주로 웹 브라우저)에 Key와 Value형태로 저장했다가 다음 요청 시 저장된 쿠키를 함께 전송합니다.
언제 방문했는지, 어떤 페이지를 클릭했는지, 어떤 상품을 구매했는지 등 다양한 정보를 기록해두었다가 사용자 맞춤 서비스, 광고, 웹 로그 분석, 서비스 속도 개선 등을 할 수 있습니다.
쿠기 표준은 쿠키를 만들 수 있는 개수와 크기의 제약을 두며 브라우저 마다 지원하는게 다릅니다.

 

쿠키 동작 메커니즘

  1. 클라이언트가 서버에 요청을 보내면
  2. 서버가 쿠키를 생성하여 HTTP 응답 헤더에 실어 클라이언트에 전송합니다.
  3. 클라이언트는 쿠키를 받아 저장해두고
  4. 클라이언트는 다음번 요청 시 저장해둔 쿠키를 HTTP 요청 헤더에 실어 보냅니다.
  5. 서버는 쿠키의 정보를 읽어 필요한 작업을 수행할 수 있습니다.
처음 클라이언트에 전송된 쿠키는 서버가 읽어올 수 없습니다. 따라서 페이지를 재접속해야 쿠키를 읽고 활용할 수 있습니다.

 

쿠키를 구성하는 속성

  • 이름(name) : 쿠키를 구별하는 이름
  • 값(value) : 쿠키에 저장할 실제 데이터
  • 도메인(domain) : 쿠키를 적용할 도메인
  • 경로(path) : 쿠키를 적용할 경로
  • 유지 기간(max age) : 쿠키를 유지할 기간

 

쿠키를 생성할 때는 생성자를 사용해서 생성하기 때문에 이름을 변경하는 메서드가 없습니다. 즉 생성 후에는 이름을 변결할 수 없습니다.
new Cookie(String name, String value) //이름과 값을 받아 새로운 쿠키 생성

 

아래 예제는 쿠키를 생성하고 쿠키 값을 확인하는 JSP 예제입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head><title>Cookie</title></head>
<body>
    <h2>1. 쿠키(Cookie) 설정</h2>
    <%
    Cookie cookie = new Cookie("myCookie", "쿠키맛나요");  // 쿠키 생성
    cookie.setPath(request.getContextPath());  		// 경로를 컨텍스트 루트로 설정
    cookie.setMaxAge(3600);  					// 유지 기간을 1시간으로 설정
    response.addCookie(cookie);  			// 응답 헤더에 쿠키 추가
   
    Cookie cookie2 = new Cookie("Cookie2", "쿠키2");
    cookie.setPath(request.getContextPath());
    cookie.setMaxAge(10);
    response.addCookie(cookie2);
    %>

    <h2>2. 쿠키 설정 직후 쿠키값 확인하기</h2>
    <%
    Cookie[] cookies = request.getCookies(); 			 // 요청 헤더의 모든 쿠키 얻기
    if (cookies!=null) {
        for (Cookie c : cookies) { 				 // 쿠키 각각의
            String cookieName = c.getName();  			// 쿠키 이름 얻기
            String cookieValue = c.getValue();  		// 쿠키 값 얻기
            // 화면에 출력
            out.println(String.format("%s : %s<br/>", cookieName, cookieValue));
        }
    }
    %>

    <h2>3. 페이지 이동 후 쿠키값 확인하기</h2>
    <a href="CookieResult.jsp">
        다음 페이지에서 쿠키값 확인하기
    </a>
</body>
</html>

 

CookieResult.jsp 파일입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CookieResult.jsp</title>
</head>
<body>
    <h2>쿠키값 확인하기(쿠키가 생성된 이후의 페이지)</h2>
    <%
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        for (int i = 0; i < cookies.length; i++) {
            String cookieName = cookies[i].getName();
            String cookieValue = cookies[i].getValue();
            out.println(String.format("쿠키명 : %s - 쿠키값 : %s<br/>",
                                      cookieName, cookieValue));
        }        
    }
    %>
</body>
</html>

 

위의 코드를 실행하면

만든 적 없는 JSESSIONID 쿠키는 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키로, 새로운 브라우저를 열면 자동으로 생성됩니다.
현재는 쿠키는 생성된 직후이기 때문에 쿠키를 확인할 수 없습니다.
클라이언트로부터 재요청을 받을 때 쿠키가 서버로 들어와 이때 내용을 확인할 수 있습니다.
다음 페이지에서 쿠키값 확인하기를 누르면, CookieResult.jsp 에 요청하면, 쿠키를 확인할 수 있습니다.

 

만든 쿠키가 잘 나오는 것을 확인할 수 있습니다.
쿠키를 삭제할 때는 쿠키를 빈 값으로 설정하고 유지 기간을 0으로 부여하면 됩니다.

 

 

'Web' 카테고리의 다른 글

Mac m1에서 자바 버전 변경하기(brew 사용)  (2) 2023.10.17
세션(Session) with JSP  (0) 2023.08.18
JSP 내장 객체(Implicit Object)  (0) 2023.06.20
JSP 동작과 기본구조 및 용어  (0) 2023.06.20