쿠키(Cookie)란?
쿠키(Cookie)란 클라이언트측에서 관리되는 정보를 의미한다. 세션과의 차이를 비교해보면 세션은 서버측에서 관리되지만 쿠키는 클라이언트에 정보가 저장된다. 또한 쿠키의 정보는 세션과 달리 브라우저를 종료한다고 해도 생존 기간이 지정되면 생존기간 동안 데이터가 사라지지 않는다.
쿠키(Cookie)는 하드디스크에 파일로 저장되기 때문에 그 파일이 남아있는 한 쿠키는 항상 유지된다.
하지만, 쿠키(Cookie)는 클라이언트에서 관리되기 때문에 보안적으로 매우 취약한 면을 가지고 있다. 하드디스크에 있는 쿠키 파일을 수정할 염려가 있기 때문이다.
쿠키를 파일에 저장하는 형태가 아닌 브라우저에 저장하는 형태(세션 쿠키)도 가능하지만
보안이 필요한 정보는 쿠키(Cookie)를 사용하지 않고 세션(Session)을 사용한다.
(세션은 서버의 메모리에 생성되어 정보를 저장하므로)
쿠키(Cookie) 사용 예로는 웹사이트를 보면 '아이디 저장' 혹은 '팝업창 일정 시간 보지 않기' 기능이 있는 것을 본 적 있을 것이다. 이러한 아이디 저장의 정보를 저장할 수 있는 것은 오로지 쿠키 뿐이다. 세션(Session)은 브라우저가 종료되면 정보가 사라질뿐더러 저장된다 하더라도 아이디는 클라이언트에게만 필요한 정보이며, 서버가 관리할 필요가 없는 데이터이기 때문에 서버에 부하만 주게 된다. 이처럼 쿠키(Cookie)는 클라이언트에서만 사용될 데이터를 보관하고 그 데이터는 보안적으로 문제를 일으키지 않을 데이터여야 한다.
쿠키(Cookie) 설정하는 방법
- 서블릿 API를 이용한 쿠키 설정 방법
- HTTP 헤더를 이용한 쿠키 설정 방법
1. 서블릿 API를 이용한 쿠키 설정
getComment() | 쿠키에 대한 설명을 가져온다 | setComment(String) | 쿠키에 대한 설명을 설정한다. |
getDomain() | 쿠키 유효한 도메인 정보를 가져온다. | setDomain(String) | 쿠키에 유효한 도메인 설정한다. |
getMaxAge() | 쿠키 만료 기간을 가져온다 | setMaxAge(int) | 쿠키 만료 기간을 설정한다. |
getName() | 쿠키 이름을 가져온다. | setValue(String) | 쿠키 값을 설정한다. |
getPath() | 쿠키 디렉터리 정보를 가져온다. | setPath(String) | 쿠키의 디렉터리 정보를 설정한다. |
getValue() | 쿠키 설정 값을 가져온다. |
서블릿 API로 쿠키를 이용하기에 앞서 다음과 같이 쿠키 객체를 생성하고 쿠키를 추가해주어야 한다.
1. 쿠키(Cookie) 객체를 생성
Cookie cookie = new Cookie(name, value);
2. 쿠키(Cookie) 클라이언트로 전송
response.addCookie(cookie);
쿠키(Cookie) 객체가 클라이언트에 전송된 것이며, 메모리에 쿠키(Cookie) 값이 저장된다.
※쿠키(Cookie) 생성됐는지 확인
String cookie = request.getHeader("Cookie");
※세션 쿠키(Session Cookie) 사용하기
cookie.setMaxAge(-1);
쿠키 만료 시간을 음수로 설정하면 쿠키를 파일에 저장하지 않고 브라우저 내 메모리에 저장되는 Session Cookie로 사용할 수 있다.
예제
▷쿠키 객체 생성 후 전송하는 코드
...
//쿠키 객체 생성
Cookie cookie = new Cookie("cookieTest", URLEncoder.encode("쿠키테스트", "utf-8"));
//쿠키 만료 시간 설정
cookie.setMaxAge(60*60*24);
//쿠키 클라이언트로 전송
response.addCookie(cookie);
...
▷쿠키를 전달받는 코드
...
Cookie[] allCookieValues = request.getCookies();
for(int i=0; i<allCookieValues.length; i++){
if(allCookieValues[i].getName().equals("cookieTest")){
System.out.println("Cookie의 값: " + URLDecoder.decode(allCookieValues[i].getValue(), "utf-8"));
}
}
- request의 getCookies() 메소드는 브라우저에게 쿠키 정보를 요청한 후 쿠키 정보를 배열로 가져온다.
2. HTTP 헤더를 이용한 쿠키(Cookie) 설정 방법
Set-Cookie: name=value; expires=date; domain=domain; path=path; secure
HTTP 헤더를 이용하여 쿠키를 설정하려면 위와 같은 형식으로 설정하면 된다. 위 속성의 기능은 다음과 같다.
- name : 쿠키(Cookie) 이름을 지정한다.
- value : 쿠키(Cookie) 값을 지정한다.
- expires : 쿠키(Cookie)의 만료 기간을 지정한다.
- domain : 저장된 쿠키(Cookie)를 서버에게 전송할 때의 도메인을 지정한다.
- path : 쿠키(Cookie)가 전송될 서버의 URL 지정하고, 유효한 URL일 경우 쿠키(Cookie) 객체를 전송한다.
- secure : 이 속성을 추가하면 보안적인 채널(SSL 등)로 전송되어야 한다.
여기서 필수적으로 요구되는 속성은 name과 value 이다. 이 두 가지의 값만 설정하여도 기본적인 쿠키(Cookie) 기능을 사용할 수 있다. name 속성과 value 속성 외에 자주 사용되는 속성은 expires 정도이며, 이것은 만료 기간을 의미한다.
expires를 설정하지 않으면 쿠키는 파일로 저장되지 않는다. 그렇기 때문에 부라우저를 종료하게 되면 세션처럼 저장된 정보는 사라지게 된다. 만료 기간을 설정한 경우 브라우저를 종료할 때 쿠키 파일이 생성된다.
'JSP & Servlet > 개념' 카테고리의 다른 글
[Servlet] 쿠키(Cookie) - 사용자 화면 설정 정보 유지 (0) | 2022.04.06 |
---|---|
[JSP & Servlet] 세션(Session) - 로그인 정보 유지 (0) | 2022.04.05 |
[Servlet] 세션(Session) (0) | 2022.04.05 |
[JSP & Servlet] 자바빈(JavaBean) (0) | 2022.03.29 |
[JSP & Servlet] 템플릿 페이지 (0) | 2022.03.29 |