본문 바로가기

JSP

[JSP] 쿠키(Cookie)

 

쿠키(Cookie)

웹 브라우저는 요청에 대한 응답을 하고 나면 해당 클라이언트와의 연결을 지속하지 않는다. 그래서 사용하는 것이 Cookie이다. cookie를 사용하여 기존 연결 정보를 저장해 두었다가 보여주는 역할을 한다.

쿠키는 전달한 데이터를 웹 브라우저로 보냈다가 웹 서버 쪽으로 되돌려 받는 방법을 사용한다. 첫 번째 웹 컴포넌트가 웹 브라우저로 HTML 문서를 보낼 때 전달할 데이터를 함께 보내고, 웹 브라우저는 데이터를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 URL과 함께 웹 서버로 보낸다.


새로운 쿠키 데이터를 저장하는 방법 - 입력 기능

1. Cookie 클래스의 객체를 만든다.

Cookie cookie = new Cookie("AGE" , "26");   "쿠키 이름",  "쿠키값"

Cookie 클래스는 javax.servlet.http 패키지에 속하고, 클래스의 객체를 만들 때는 쿠키의 이름고 ㅏ값을 파마미터로 넘겨주어야 한다. 파라미터는 모두 String 타입이 되어야 하므로 쿠키의 값이 수치일 경우 문자 데이터로 만들어줘서 넘겨야 한다.

 

2. addCokkie 메서드를 호출한다.

response.addCookie(cookie);

addCookie 메서드를 호출할 때 웹 브라우저로 쿠키를 보내는 기능을 수행하며, JSP 페이지에서는 reponse 내장객체, 서블릿 클래스에서는 doGet, doPost 메서드의 두 번째 파라미터에 대해 호출한 후 Cookie 객체를 파라미터로 넘겨줘야 한다.


쿠키 데이터를 읽는 방법 - 조회 기능

웹 브라우저는 웹 서버가 아무런 요청을 하지 않아도 웹 서버로 URL을 보낼 때마다 URL에 포함된 웹 서버의 주소에 해당하는 모든 쿠키를 찾아서 웹 서버로 보낸다.

쿠키는 받는 일은 getCookies 메서드를 이용한다.

Cookie cookies[] = request.getCookies();

getCookies 메서드는 JSP 페이지에서는 request 내장변수에 대해 호출해야 하고, 서블릿 클래스에서는 doGet, doPost 메서드의 첫 번째 파라미터에 대해 호출해야 한다.

메서드는 웹 브라우저가 보낸 모든 쿠키를 cookie 배열로 만들어서 리턴하기 때문에 리턴값을 Cookie 배열 변수에 받아야 한다.

 

쿠키의 이름을 찾기 위해 getName 메서드를 이용한다.

String name = cookie.getName();

메서드가 리턴한 Cookie 배열에서 특정 쿠키를 찾기 위해서는 배열에 있는 Cookie 객체를 하나씩 가져다가 이름을 비교하여 찾을 수 밖에 없는데 이때 getName 메서드를 사용한다.

 

getValue 메서드를 호출해서 쿠키 값을 가져온다.

String value = cookie.getValue();

 

쿠키 데이터를 삭제하는 방법 - 삭제 기능

쿠키 데이터를 삭제하는 방법은 기능이 따로 있는 것이 아니라 쿠키의 남은 수명을 0으로 설정하는 방법을 사용한다.

쿠키의 수명을 지정하기 위해서는 addCookie 메서드를 호출하기 전에 Cookie 객체에 대해 setMaxAge 메서드를 호출하면 되고, 쿠키의 남은 수명을 초단위로 넘겨줘야 한다.

cookie.setMaxAge(3600);    1시간 후 쿠키 삭제

cookie.setMaxAge(0);    쿠키를 바로 삭제하도록 만드는 값

cookie.setMaxAge(-1);    웹 브라우저가 끝날 때 쿠키가 삭제되도록 만드는 값

 

쿠키가 특정 경로명을 갖는 URL로만 전송되도록 만드는 방법

웹 브라우저는 웹 서버로 URL을 보낼 때 웹 서버에 속하는 모든 쿠키를 함께 보내는 것이 기본적인 동작이지만 전송 범위를 좁혀야 할 경우 addCookie 메서드를 호출하기 전에 Cookie 객체에 대해 setPath라는 메서드를 호출하면 된다.

cookie.setPath("/JSP/cookie01/")l

setPath 메서드에 넘겨주는 URL 경로명은 반드시  / 로 시작해야 하고 마지막도 / 로 끝내는 것이 좋다.

 

쿠키가 여러 웹 서버로 전송되도록 만드는 방법

웹 서버가 보낸 쿠키를 다른 웹 서버가 받아야 하는 일을 하기 위해서는 addCookie 메서드를 호출하기 전에 Cookie 객체에 대해 setDomain 메서드를 호출한다.

cookie.setDomain(".cookie.co.kr");

setDomain 메서드는 도메인을 설정하는 메서드이다.


쿠키를 활용한 예시 코드