병갈이 블록

쿠키. 본문

IT(Old)/JSP 공부 기록

쿠키.

woojang 2017. 6. 22. 13:36

쿠키의 역할.

서버로 부터의 받은 정보를 웹 브라우저가 저장하는 데이터. 서버에 재접속시 브라우저는 쿠키를 요청해더에 함께 보내고 서버는 브라우저로 부터 다시 전달받은 쿠키 값을 토대로 요청을 처리한다. JSP는 웹 서버에서 쿠키를 생성시킨다.

쿠키 구성

- 저장된 name속성의 값을 이름으로 가지는 쿠키객체가 생성되고 그 안에 여러 속성들이 있음.

- 이름 (name)

- 값 (value)

- 유효시간 (maxage)

- 도메인 (domain)

- 경로 (path)


쿠키 관련 메서드

 String 

getName() 

 쿠키 이름을 리턴. 

String 

getValue() 

 쿠키 값을 구함 

void 

setValue(String value) 

 쿠키 값을 지정

 String 

getDomain() 

 도메인 값을 구함

 void 

setDomain(String pattern) 

 도메인을 지정

 String 

getPath() 

 쿠키 전송 경로를 구함

 void 

setPath(String uri) 

 쿠키 전송 경로를 지정

int 

getMaxAge() 

 쿠키의 유효기간을 구함.(초단위)

 void 

setMaxAge(int expiry) 

 쿠키의 유효기간을 지정.(초단위)



쿠키 생성하기.

: response 객체의 addCookie(String cookiename) 메서드를 사용. 응답에 쿠키 추가.

Cookie cookie = new Cookie("이름", "값");

response.addCookie(cookie);


※ java.net.URLEncoder를 import하여 "값"을 "UTF-8"로 인코딩해서 사용하기도 함.

import="java.net.Encoder"

Cookie cookie = new Cookie("이름", URLEncoder.encode("값", "utf-8"));

response.addCookie(cookie);


쿠키 읽어오기.

: request 기본객체의 getCookies()메서드를 사용. Cookie배열을 반환.(Cookie[])

Cookie[] cookies = request.getCookies();

if(cookie != null && cookies.length > 0)    //NullPointException이 발생할수 있기에 꼭 null여부를 확인한다.

{

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

{

cookies[i].getName();    //쿠키의 이름들을 가져온다. 필요에 맞게 자료처리

cookies[i].getValue();    //쿠키의 값들을 가져온다. 필요에 따라 디코딩해야되는 부분.

}

}


단, 쿠키 생성시 URLEncoder로 인코딩 된 값을 전송했다면, 응답페이지에서는 URLDecoder로 getValue()값을 디코딩해서 사용해야됨.

우선, 응답페이지에 java.net.URLDecoder를 import한다.

cookie[i].getValue() => URLDecoder.decode(getValue(), "인코딩한 값")


쿠키값 변경 및 삭제.

- 변경 : 같은 이름의 쿠키가 존재하는지를 검색한 다음 있다면 같은 이름으로 다시 생성해서 전송. (검사 안하고 보내면 '변경'의 목적으로 보낸 쿠키가 새로운         쿠키으로 생성될 수도 있다. 꼭 변경의 목적이라면 같은 이름이 있는지 검색하고 있으면 보내고, 없으면 안보내도록 해야된다.)

- 삭제 : 삭제하려는 쿠키의 이름이 존재하는지 확인을 하고 같은 이름으로 빈값을 가진 쿠키를 생성한다. setMaxAge함수의 값을 "0"로 하고 response에 추가해서         보낸다.


쿠키의 저장  경로.

- 도메인 값에 따라(setDomain(String domainname))

- 경로에 따라(setPath(String uri))


1. 도메인 값에 따라 : 브라우저는 접속한 서버에서 쿠키가 전송될 때 접속한 서버와 관련된 도메인 값이 저장된 쿠키만 저장한다. (도메인 값을 지정하지 않으면 접속한 서버의 도메인으로 자동 저장한다.) 예를 들어 A라는 도메인을 가진 서버에 접속했을 경우 서버에서 A도메인이 저장된 쿠키와 B도메인이 저장된 쿠키를 클라이언트에 전송했다고 했을 때 클라이언트 브라우저는 자신이 접속한 도메인인 A도메인과 관련된 도메인값이 저장된 쿠키만 저장을 하고 B도메인 값이 장된 쿠키는 저장하지 않는다. (클라이언트에게 전송은 된다. 단지 저장여부를 브라우저가 판단하여 저장하거나 저장하지 않는다.) 이렇게 저장된 쿠키는 A메인으로 접속했을 경우에만 확인이 가능하게된다. 

※ setDomain 사용시 서브 도메인이 있는 경우, 메인 도메인을 쿠키값으로 지정하려 할 때 책에서는 "."으로 시작하게 저장하라고 했는데 실습중 계속해서 오류가 났다. "."을 지우고 저장했더니 쿠키에 자동으로 "."이 저장이 되었고 오류도 나지 않았고 접속도 잘 된다. 암튼, 책이랑 좀 달랐던 부분.

(예. ".dmain.com"으로 끝나는 모든 도메인에 쿠키를 저장하고 전송하고 싶다면, "."을 빼고 dmain.com으로 저장을 하면 쿠키에는 자동으로 ".dmain.com"으로 저장이 되고, korea.dmain.com, china.dmain.com 등, dmain.com으로 끝나는 서버에 접속시 브라우저에는 쿠키가 저장되어있는걸 확인 할 수 있다.)

달리 말하면 '도메인'별로 쿠키가 저장된다. 다른 도메인 값으로 저장된 쿠키값은 다른 도메인으로 접속시 확인이 불가능하다.

2. 경로에 따라 : 웹 어플리케이션 루트폴더를 기준으로 해서 contextPath를 저장하면 그 폴더를 포함하여 아래에 존재하는 자식폴더 전부에 쿠키가 저장됨.

※ "/A"폴더로 저장을 했다면 /A/a, /A/d등의 폴더에 있는 jsp페이지에서도 쿠키가 저장되어 있는걸 확인 할 수 있다.


'IT(Old) > JSP 공부 기록' 카테고리의 다른 글

세션.  (0) 2017.06.22
쿠키 - 2  (0) 2017.06.22
JavaBeans  (0) 2017.06.21
<jsp:forward>  (0) 2017.06.20
두가지의 include  (0) 2017.06.20
Comments