자바(Java)/JAVA 2EE

JSP에서 쿠키(cookie) 사용 방법

본클라쓰 2009. 10. 9. 10:07

 

HTTP 프로토콜의 비연결 통신에 따른 사용자 구분 방법

 

비연결 방식은 상호간의 패킷의 교환이라는 개념으로 네트워크 혼잡에 희한 피해를 최대한 줄이기 위한 구성 방법입니다. 하지만 서버는 클라이언트의 연결정보를 유지할 수 없어서 같은 클라이언트의 요청에 대해 일괄되게 처리하기 어렵습니다.

 

이와 같은 문제점들 해결하기 위한 방법이 쿠키와 세션인데 서버는 쿠키와 세션을 이용해 클라이언트를 구별합니다.

 

쿠키란 일종의 텍스트 파일로 서버에서 클라이언트에게 쿠키라는 클라이언트 정보를 클라이언트의 자원에 저장시켜 놓습니다. 그 후 클라이언트가 서버에 요청할 시 쿠키 정보를 HTTP 헤더에 포함시켜 서버로 전송하게 합니다. 이 정보를 바탕으로 서버는 클라이언트를 구별하게 됩니다. 

 

쿠키를 사용하여 클라이언트를 구별할 때는 주의를 기울려야 합니다. 쿠키는 텍스트 형태로 클라이언트의 자원에 저장되어 있으며 유지되는 시간이 있기 때문에 여러 사람이 사용하는 컴퓨터의 경우 쿠키의 정보를 바탕으로 해당 서버에서 클라이언트의 정보를 얻을 수 있기 때문입니다. 따라서 쿠키에 계정에 대한 정보가 있다면 해킹에 취약하게 됩니다. 따라서 중요한 정보는 세션을 통해 유지시키는 것이 좋습니다.

 

 

■ 쿠키가 사용되는 순서

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. 사용자는 페이지를 요청합니다.

2. 서버는 사용자 요청을 분석하여 계속해 사용자를 구별한 필요가 있다면 쿠키를 생성합니다.

3. 사용자 요청을 처리한 후 쿠키와 응답을 사용자에게 전달합니다.

4. 사용자로 전달된 쿠키를 사용자PC에 저장됩니다.

5. 사용자가 추후에 보내는 요청에는 쿠키값이 헤더에 포함되어 서버에 전송되게 됩니다.

 

 

■ 쿠키를 사용하기 위한 방법

 

// 1. 페이지 상단에 쿠키를 사용하기 위해 쿠키 클래스 import

<%@ page import = "javax.servlet.http.*" %>    // 쿠키클래스는 javax.serlvet.http 패키지에 정의

...

 

// 2. 쿠키 생성 후 유효시간 지정 후 응답에 포함시키기

<%

Cookie cookie = new Cookie(name, value);

cookie.setMaxAge(유효시간);

Response.addCookie(cookie);

%>

 

쿠키는 보안상 사용을 잘 하지 않는 방법이며, 보통 Session을 많이 사용합니다.


 

■ 쿠키 제거하기

 

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

cookie.setMaxAge(0); 

response.addCookie(cookie); 

 

쿠키를 제거하는 방법은 쿠키의 유효시간을 0으로 설정하고 response객체를 이용하여 클라이언트로 전송하면 쿠키를 제거합니다.

 

 

 실제 쿠키 사용 예제

 

Cookie cookie = new Cookie("name", "홍길동");

cookie.setMaxAge(60);      // 수명이 60초인 쿠키 

response.addCookie(cookie);

 

cookie = new Cookie("age", "20");

response.addCookie(cookie); 

 

위와 같이 쿠키를 생성하여 클라이언트에게 쿠키 정보를 전달했습니다. 쿠키의 정보를 읽는 페이지는 다음과 같이 작성하여 쿠키의 정보를 얻어옵니다.  

 

<% Cookie cookie[] = request.getCookies(); %>

 

이름 : <%=cookie[0].getName() %><br/>

값 : <%=cookie[0].getValue() %> 

 

 

쿠키 클래스 메소드

 

  • Cookie(name, value) : 생성자
  • String getDomain() : 쿠키를 저장한 호스트의 도메인을 반환함

  • void setDomain(String domain) : 지정한 호스트에게만 쿠키를 보여 주도록 설정하며 기본적으로 쿠키를 저장한 호스트의 도메인이 설정

  • int getMaxAge()  :  쿠키의 최대 수명 기간을 반환함

  • void setMaxAge(int second)  :  쿠키의 최대 수면 기간을 sec단위로 설정

  • String getName()  :  쿠키의 이름을 반환함

  • String getPath()  :  쿠키의 유요한 URL의 일부를 반환함

  • void setPath(String path)  :  경로를 설정하는 메소드

  • boolean getSecure()  :  쿠키가 보안채널을 통해 전달되는지 여부를 반환