[JSP]쿠키(Cookie)란?

2019년 11월 03일 by Xion

    [JSP]쿠키(Cookie)란? 목차

쿠키의 개요

 

- HTTP 프로토콜은 상태가 없다. 즉 이전에 무엇을 했고, 지금 무엇을 했는지에 대한 정보를 갖고 있지 않는 특성을 가지고 있다.

즉, 웹 브라우저(클라이언트)의 요청에 대한 응답을 하고 나면 해당 클라이언트와의 연결을 지속하지 않는다 (Connectionless)

 

- HTTP 프로토콜은 상태에 대한 지속적인 연결이 없다. 따라서 이런 부분을 해결하기 위해서 웹 서버 측에 웹 브라우저의 정보를 저장한 후 계속되는 웹브라우저의 요청 속에 포함되어 있는 웹 브라우저의 정보와 비교해서 동일한 웹 브라우저로부터 온 요청을 판단할 수 있다.



쿠키란 ?

- 쿠키(Cookie)는 상태가 없는 프로토콜을 위해 상태를 지속시키기 위한 방법이다.

 

- 기본적으로 쿠키는 그 쿠키를 생성한 서버에만 전송된다.

 

- 아이디 기억하기 기능을 구현할 때 쿠키를 사용한다. 또한 로그인 정보를 쿠키에 보관하면 자동 로그인 기능을 구현할 수도 있다.

 

-쿠키는 웹 브라우저의 정보를 웹 브라우저에 저장하므로, 이후에 서버로 전송되는 요청에는 쿠키가 가지고 있는 정보가 같이 포함돼 전송된다.

이때 웹 서버는 웹 브라우저의 요청 속에 포함되어 있을 쿠키를 읽어서 새로운 웹 브라우저인지 이전에 요청을 했던 웹 브라우저인지를 판단할 수 있다.

 

- 이러한 방법으로 웹 브라우저를 통해서 특정 사이트에 접속하면 웹 브라우저에 쿠키가 저장되어 접속한 사용자의 정보가 유지되는 것이다.

 

- 쿠키는 도메인을 이용해서 쿠키를 여러 도메인 주소에 공유할 수 있다.

 

 

- 쿠키는 웹 사이트에 접속할 때 생성되는 정보를 담은 임시 파일이다. 일반적으로 쿠키는 4KB 이하의 크기로 생성된다. 이러한 쿠키의 목적은 원래 사이트에 접속한 사용자의 정보를 유지하거나, 사이트에 접속하는 사용자들이 해당 사이트에 쉽게 접속하기 위한 것이다.

 

- 어떤 웹 사이트를 처음 방문해서 로그인해 사용하고 나면, 아이디와 패스워드를 기록한 쿠키가 만들어진다. 그 다음부터 해당 사이트에 접속하면 별도의 절차 없이 사이트에 빠르게 연결할 수 있게 된다. 쿠키는 이러한 목적으로 사용하기 위해 만들어진 것이다.

 

- 그러나 쿠키는 웹 브라우저가 방문했던 웹 사이트에 대한 정보 및 개인의 정보가 기록되기 때문에 개인의 사생활이나 정보를 침해할 소지가 있다는 문제점을 안고 있다. 이러한 보안상의 문제를 조금이나마 해소하기 위해서 웹 브라우저 자체에 쿠키 거부 기능이 추가되었다.

 

- 쿠키에 대한 거부가 웹 브라우저에 설정되어 있으면, 쿠키 본래의 목적인 웹 브라우저와의 연결을 지속시키는 기능을 수행할 수 없게 된다. 따라서 이것은 쿠키의 가장 치명적인 단점이 된다.

 

쿠키 문법

-JSP에서 쿠키를 사용하려면 javax.servlet.http 패키지에 있는 Cookie 클래스의 객체를 생성해야 한다.
이렇게 생성된 쿠키에는 각각의 웹 브라우저를 판별할 수 있는 정보가 포함되어 있다. 쿠키는 웹 서버가 웹 브라우저의 요청에 응답할 때 response 객체에 실려서 사용자의 웹 브라우저에 저장된다.

 

- 쿠키는 이름, 값, 유효기간, 도메인, 경로 등으로 이루어져 있다. 이들 중 가장 중요한 구성 요소는 쿠키의 이름과 값이다.

 

 쿠키 생성하기

 

<%

Cookie info = new Cookie("쿠키이름", "쿠키값");    // 쿠키를 생성한다. 



info.setMaxAge(365*24*60*60);                                 // 쿠키의 유효기간을 365일로 설정한다.

info.setPath("/");                                                    // 쿠키의 유효한 디렉토리를 "/" 로 설정한다.



response.addCooke(info);                                    // 클라이언트 응답에 쿠키를 추가한다.



%>

 

쿠키에 저장된 정보 읽어오기

-쿠키를 생성하면 그 이후부터 해당 쿠키를 사용할 수 있다.

-request.getCookies()메서드는 Cookie배열을 리턴한다.

쿠키가 존재하지 않으면 null 리턴

<%

Cookie[] cookies = request.getCookies();            // 요청정보로부터 쿠키를 가져온다.



out.println("현재 설정된 쿠키의 개수 : " + cookies.length);    // 쿠키가 저장된 배열의 길이를 가져온다.



for(int i = 0 ; i<cookies.length; i++){                            // 쿠키 배열을 반복문으로 돌린다.



out.println(i + "번째 쿠키 이름 : " + cookies[i].getName());            // 쿠키의 이름을 가져온다.

out.println(i + "번째 쿠키에 설정된 값 : " + cookies[i].getValue());    // 쿠키의 값을 가져온다.



}

%>

 

설정된 쿠키를 모두 삭제하기

<%

Cookie[] cookies = request.getCookies();            // 요청정보로부터 쿠키를 가져온다.



for(int i = 0 ; i<cookies.length; i++){                            // 쿠키 배열을 반복문으로 돌린다.



cookies[i].setMaxAge(0);                        // 특정 쿠키를 더 이상 사용하지 못하게 하기 위해서는 

// 쿠키의 유효시간을 만료시킨다.

response.addCookie(cookies[i]);            // 해당 쿠키를 응답에 추가(수정)한다.

}

%>

 

쿠키 관련 메소드

 

 메소드

설명 

String getCommnet() 

 쿠키에 대한 설명을 가져온다. 

String getDomain() 

 쿠키의 유효한 도메인 정보를 가져온다. 

int getMaxAge() 

 쿠키의 사용할 수 있는 기간에 대한 정보를 가져온다. 

String getName()

 쿠키의 이름을 가져온다 

String getPath() 

 쿠키의 유효한 디렉토리 정보를 가져온다. 

boolean getSecure() 

 쿠키의 보안이 어떻게 설정되어 있는지 가져온다. 

String getValue() 

 쿠키에 설정된 값을 가져온다. 

int getVersion() 

 쿠키의 버전을 가져온다. 

void setComment(String) 

 쿠키에 대한 설명을 설정한다. 

void setDomain(String) 

 쿠키에 유효한 도메인을 설정한다. 

void setMaxAge(int) 

 쿠키의 유효한 기간을 설정한다. 

void setPath(Striong) 

 쿠키의 유효한 디렉토리를 설정한다. 

void setSecure(boolean) 

 쿠키의 보안을 설정한다. 

void setValue(String) 

 쿠키의 값을 설정한다. 

void setVersion(int) 

 쿠키의 버전을 설정한다. 

 

쿠키로 로그인 상태 유지하는 방법

1.로그인에 성공하면 특정 이름을 갖는 쿠키를 생성한다.

2.해당 쿠키가 존재하면 로그인한 상태라고 판단.

3.로그아웃하면 해당 쿠기를 삭제한다.

 

->ex) 로그인하면 AUTH라는 쿠키를 생성하고 "AUTH"쿠키가 존재하면 로그인한 상태라고 인식하는 방법

ex)response.addCookie ( Cookies.createCookie("AUTH",id,"/",-1 )  ) ;

 

단 이러한 방식은 평문으로 저장되기때문에 다양한 암호화 방식을 혼합하여 저장해야한다.