JSP

제5장. 쿠키

십억10 2009. 3. 24. 18:09

▶ 쿠키

● 쿠키 동작 방식

① 쿠키 생성 단계

  - 주로 웹 서버 측에서 생성

  - 자바 스크립트를 사용해서 클라이언트 측에서 쿠키를 생성하기도 한다.

  - 생성된 쿠키는 응답 데이터와 함께 저장되어 클라이언트로 전송된다.

② 쿠키 저장 단계

  - 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관한다.

  - 쿠키의 종류에 따라 메모리나 파일로 저장된다.

③ 쿠키 전송 단계

  - 웹 브라우저는 한번 저장된 쿠키를 매번 요청이 있을 때마다 웹 서버에 전송

  - 웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 작업을 수행


● 쿠키의 구성

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

  - 하나의 웹 브라우저는 여러 개의 쿠키를 가질 수 있는데 이를 구분하는 것

  - 아스키 코드의 알파벳과 숫자만을 포함할 수 이TEk.

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

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

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

  - 각각의 쿠키는 관련된 값을 가지고 있어 이 값을 사용하여 원하는 작업을 수행

  - 알파벳과 숫자 등의 값이 아닌 바이너리 값인 경우 BASE64 인코딩으로 처리해 주어야 한다.

③ 유효기간 : 쿠키의 유지 시간

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

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


● 쿠키 생성하기

※ 사용 예

 

<%

       Cookie cookie = new Cookie("cookieName", URLEncoder.encode("cookieValue"));

       // 첫 번째 인자는 쿠키 이름, 두 번째 인자는 쿠키의 값

       response.addCookie(cookie);

%>


● 쿠키 메소드

메 소 드

리턴 타입

설  명

getName()

String

쿠키의 이름을 구한다.

getValue()

String

쿠키의 값을 구한다.

setValue(String value)

void

쿠키의 값을 지정한다.

setDomain(String pattern)

void

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

getDomain()

String

쿠키의 도메인을 구한다.

setPath(String uri)

void

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

getPath()

String

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

setMaxge(int expiry)

void

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

getMaxAge()

int

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


● 쿠키 값 읽어 오기

※ 사용 예

 

<%

       Cookie[] cookies = request.getCookies();

       if(cookies != null && cookies.length > 0) {

               for(int i = 0 ; i < cookies.length ; i++) {

%>

                       <%= cookies[i],getName() %>

                       <%= URLDecoder.decode(cookies[i].getValue()) %> <br>

<% } else { 쿠키가 존재하지 않습니다. } %>


● 쿠키의 변경

- 같은 이름의 쿠키를 새로 생성해서 응답 데이터로 보내주면 된다.

- 같은 이름의 쿠키가 있는지 확인을 하고 있을 경우 같은 이름으로 생성하고 없을 경우는 새로운 쿠키를 만들어준다.

- 사용 예

 

<%

       Cookie[] cookies = request.getCookies();

       if(cookies != null && cookies.length > 0) {

               for(int i = 0 ; i < cookies.length ; i++) {

                       if(cookies[i].getName().equals("name")) {//같은 이름이 있는지 확인

                               Cookie cookie = new Cookie("name",

                                       URLEncoder.encode("newValue"));

                               response.addCookie(cookie); } } }

%>


● 쿠키의 삭제

- 사용 예

 

<%

       Cookie[] cookies = request.getCookies();

       if(cookies != null && cookies.length > 0) {

               for(int i = 0 ; i < cookies.length ; i++) {

                       if(cookies[i].getName().equals("name")) {//같은 이름이 있는지 확인

                               Cookie cookie = new Cookie("name", "");

                               cookie.setMaxAge(0);

                               response.addCookie(cookie); } } }

%>


● 쿠키의 도메인

- 쿠키는 그 쿠키를 생성한 서버에만 전송되지만 다른 사이트로 연결할 때 같은 쿠키가 전송되게 하고 싶을 때

- 현재 서버의 도메인 및 상위 도메인에 대해서만 setDomain()을 설정할 수 있다.

- 현재 서버의 도메인이 www.asdf.com 일 때 www.asdf.com 이나 .asdf.net 만  설정할 수 있다.

- 사용 예

 

<%

       Cookie cookie = new Cookie("id", "sadf");

       cookie.setDomain(".asdf.net");

       response.addCookie(cookie);

%>


● 쿠키의 경로

- 지정한 경로 또는 하위 경로에 대해서만 쿠키를 전송한다.

- 사용 예

 

<%

       Cookie cookie = new Cookie("name", "value");

       cookie.setPath("/asdf");

%>


● 쿠키의 유효시간

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

- 사용 예

 

<%

       Cookie cookie = new Cookie("name", "value");

       cookie.setMaxAge(60*60); // 60초(1분) * 60 = 1시간

%>