1. 쿠키(Cookie)

- API : http://docs.oracle.com/javaee/7/api/javax/servlet/http/Cookie.html

- 웹 브라우저가 보관하고 있는 데이터로, 웹 서버에 요청을 보낼 때 쿠키를 함께 전송한다.

- 웹 서버는 전송받은 쿠키를 사용하여 필요한 데이터를 읽어올 수 있다.

- 웹 브라우저는 쿠키가 삭제되기 전까지 웹 서버에 쿠키를 전송한다.

- 웹 어플리케이션을 사용하는 동안 지속적으로 유지해야 하는 정보는 쿠키를 사용해서 저장한다.

- 쿠키는 지속성을 갖고 있고 얼마나 지속할 지의 여부를 지정할 수 있다.


2. 쿠키 동작 방식

- 쿠키 생성 : JSP 프로그래밍에서 쿠키는 주로 웹 서버 측에서 생성한다. 생성된 쿠키는 응답 데이터에 함께 저장되어 웹 브라우저에 전송된다.

- 쿠기 저장 : 웹 브라우저는 응답 데이터에 포함된 쿠키를 저장소에 보관한다. 쿠기의 종류에 따라 메모리나 파일로 저장된다.

- 쿠기 전송 : 웹 브라우저는 한번 저장된 쿠키를 매번 요청이 있을 때마다 웹 서버에 전송한다. 웹 서버는 쿠키를 사용해서 필요한 작업을 수행할 수 있다.


3. 쿠키 구성

- 쿠키의 주요 구성 요소는 이름과 값이다.

- 하나의 웹 브라우저가 여러 개의 쿠키를 가질 수 있다.

- 이름 : 각각의 쿠키를 구별하는데 사용되는 이름

- 값 : 쿠키의 이름과 관련된 값

- 유효 시간 : 쿠키의 유지 시간

- 도메인 : 쿠키를 전송할 도메인

- 경로 : 쿠키를 전송할 요청 경로

- 큐키의 이름 및 값에 대한 규칙이 정의되어 있다.

- 쿠키의 이름은 아스키 코드의 알파벳과 숫자만을 포함할 수 있다.

- 콤마(,), 세미콜론(;), 공백(' ') 등의 문자는 포함할 수 없다.

- '$'로 시작할 수 없다.

- 쿠키의 값이 알파벳과 숫자가 아닌 바이너리 값을 포함하고 있는 경우 BASE64 인코딩으로 처리해야 한다.


4. 쿠키 생성

- Cookie cooke = new Cookie("쿠키명", "쿠키값");

- response.addCookie(cookie);

- Cookie 클래스를 사용하여 객체를 생성하고 인자값은 쿠키이름과 쿠키 값을 지정한다.

- response 기본 객체의 addCookie() 메서드를 사용하여 쿠키를 추가한다.


 메서드

 반환형 

 설명 

 getName() 

 String 

 쿠키의 이름을 구한다. 

 getValue() 

 String 

 쿠키의 값을 구한다. 

 setValue(String value) 

 void 

 쿠키의 값을 지정한다. 

 setDomain(String pattern) 

 void 

 이 쿠키가 전송될 서버의 도메인을 지정한다. 

 getDomain() 

 String 

 쿠키의 도메인을 구한다. 

 setPath(String uri)

 void 

 쿠키를 전송할 경로를 지정한다. 

 getPath()

 String 

 쿠키의 전송 경로를 구한다. 

 setMaxAge(int expiry) 

 void 

 쿠키의 유효 시간을 초 단위로 지정한다. 음수를 입력할 경우 웹 브라우저를 닫을 때 쿠키가 함께 삭제된다. 

 getMaxAge()

 int 

 쿠키의 유효 시간을 구한다. 


<!-- setCookie.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	String name = "gz", addr ="seoul";
	
	Cookie cookie1 = new Cookie("name", name);
	Cookie cookie2 = new Cookie("addr", addr);
	
	response.addCookie(cookie1);
	response.addCookie(cookie2);
%>



5. 쿠키 값 읽기

- Cookie[] cookies = request.getCookies();

- 웹 브라우저는 요청 헤더에 쿠키를 저장해서 보낸다.

- getCookies() 메서드는 Cookie 배열을 반환하고 쿠키가 존재하지 않을 경우에는 null을 반환한다.


<!-- getCookie.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>쿠키</title>
</head>
<body>
	<%
	
		String key = "", value = "";
	
		Cookie[] cookies = request.getCookies();
		if (cookies != null && cookies.length >= 1) {
			for (Cookie c : cookies) {
				key = c.getName();
				value = c.getValue();
				out.print(key + " : " + value + "<br>");
			}
		}
	%>
</body>
</html>

<!-- 
	실행결과
	
	name : gz
	addr : seoul
 -->



6. 쿠키 값 변경 및 쿠키 삭제

- 변경 : 같은 이름의 쿠키를 새로 생성해서 데이터로 보낸다.

- 삭제 : Cookie 클래스의 setMaxAge() 메서드를 호출할 때 인자 값으로 0을 준다.


7. 쿠키 유효시간

- 유효시간을 지정하지 않을 경우 웹 브라우저를 닫을 때 쿠키는 자동으로 삭제된다.

- setMaxAge() 메서드를 사용한다.

+ Recent posts