-
JSP에서 쿠키(cookie) 사용법컴퓨터 2008. 3. 7. 19:13
웹 개발을 하다보면 쿠키를 사용할 일이 종종 있다. 쿠키에 대한 자세한 이야기는 필자가 따로이 글을 준비 중이므로 많은 기대 부탁드리며, 여기서는 간략하게 JSP에서 쿠키를 다루는 법만 소개하겠다.
먼저, 쿠키를 세팅하는 코드를 보기로 하자.
<%@ page contentType="text/html; charset=EUC-KR" %>
<%
String myEmail = "sehkone@bawi.org";
Cookie cookieEmail = new Cookie("email", myEmail);
cookieEmail.setMaxAge(-1);
response.addCookie(cookieEmail);
%>
<HTML>
<HEAD>
<TITLE>쿠키 세팅</TITLE>
</HEAD>
<BODY>
별로 하는 일은 없는 JSP 문서지만 쿠키를 세팅하는 예를 보여줍니다.
</BODY>
</HTML>여기서, 새로운 인스턴스(변수)인 response를 만나게 된다. response는 JSP문서가 서블릿으로 변환될 때 내부적으로 사용하는 HttpServletResponse 클래스의 인스턴스(변수)로서, JSP 문서 내에서 자유롭게 사용할 수 있다. 앞서 언급한 request가 사용자의 요청에 관한 것을 다룬다면, 이 response는 사용자의 요청에 대한 JSP 문서의 응답에 관한 것을 다룬다. 초보 단계에서는 역시 자세한 메카니즘에 대한 이해는 뒤로 미루어 두고, 쿠키를 사용하기 위해서는 response 변수를 사용하여 addCookie() 메쏘드를 호출해야 한다는 사실을 알아두자. 염두에 둘 것은 request, response가 인스터스들이므로 이와 같은 이름의 다른 인스턴스를 정의하면 안 된다는 사실이다.
한 줄 한 줄 살펴보자. 자바 코드 부분의 첫번째 줄에서는 이메일 주소를 스트링 인스턴스에 넣었다. 두번째 줄은 Cookie 클래스 타입으로 새로운 쿠키를 만드는데, 그 이름은 email이고 값은 myEmail 인스턴스 값으로 한다는 뜻이다. 세번째 줄에서는 이 쿠키의 유효 기간을 설정하는 것인데, -1처럼 음의 값은 브라우저 종료 시까지 이 쿠키가 유효하도록 하는 설정이다. 0은 이 쿠키를 없애라는 설정이며, 특별히 유효 기간을 명시하고 싶으면 setMaxAge 메쏘드의 인자로 초 단위 값을 써 주면 된다.
브라우저에 쿠키를 세팅하는 방법을 살폈고, 이제 브라우저로부터 쿠키를 얻는 방법을 알아보자. JSP나 서블릿에서 쿠키를 얻을 때는 쿠키 이름을 명시하여 얻을 수 있는 방법은 없고 모든 쿠키를 다 받아서 각각의 쿠키의 이름과 값을 검사하는 방법을 사용해야 한다. 다음의 예는 쿠키 중에서 그 이름의 "id"인 것을 찾아서 그 값을 출력하는 JSP이다.
<%@ page contentType="text/html; charset=EUC-KR" %>
<HTML>
<HEAD><TITLE>id 쿠키 값 검사</TITLE></HEAD>
<BODY>
<%
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
Cookie thisCookie = cookies[i];
if ("id".equals(thisCookie.getName())) { // if문 시작
%>
아이디는 <%= thisCookie.getValue() %> 입니다.<BR>
이 부분에는 자유로운 HTML 코드가 들어갈 수 있습니다.
<%
} // if문의 끝
%>
</BODY>
</HTML>for 문 두 줄 아래의 if문 내의 JSP 형태를 주의깊게 보도록 하자. <% } %>로 if 문을 닫아 주는 일을 종종 잊는 경우가 많은데 항상 신경을 쓰도록 하자.
이제, 특정한 쿠키를 찾아서 그 쿠키를 없애는 방법을 알아보자. 바로 위의 코드에 몇 줄만 추가하면 id 쿠키를 없앨 수 있다. 다음을 보자.
<%@ page contentType="text/html; charset=EUC-KR" %>
<HTML>
<HEAD><TITLE>id 쿠키 값 없애기</TITLE></HEAD>
<BODY>
<%
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
Cookie thisCookie = cookies[i];
if ("id".equals(thisCookie.getName())) { // if문 시작
%>
아이디는 <%= thisCookie.getValue() %> 입니다.<BR>
이 부분에는 자유로운 HTML 코드가 들어갈 수 있습니다.
<%
thisCookie.setMaxAge(0); // 쿠키를 없애라는 유효기간 설정
response.addCookie(thisCookie); // 다시 쿠키를 세팅
} // if문의 끝
%>
이제 id 쿠키는 없어졌습니다.
</BODY>
</HTML>