본문 바로가기

네트워크보안/asp

쿠키 읽어오기

이제 쿠키값을 읽어오는 방법을 알아보겠습니다. 쿠키값을 읽어오기 위해서는 request.getCookies 메서드를 사용합니다. 이 메서드는 반환형이 Cookie[] 형이라는 것만 유념하고 있으면 그렇게 까다로운 메서드는 아닙니다.

n public Cookie[] getCookies()

그럼 쿠키를 읽어오는 예제를 살펴 보도록 하겠습니다. 이 예제를 실행 하시기 전에 앞에 쿠키 설정하는 예제를 다시 실행하고 창을 닫은 후 다시 창을 열어 실행 시켜 보시기 바랍니다. 만약 쿠키가 설정되지 않으면 쿠키를 설정해야 합니다. 라는 글이 뜨게 됩니다.

GetCookieTest.jsp

설정된 쿠키값을 가져오는 예제

<%@ page contentType= "text/html;charset = euc-kr"%>
<B>쿠키 읽어 오는 예제</B>
<%
String value = request.getHeader(
"Cookie");
if(value == null) {
out.print(
"쿠키를 설정해야 합니다.<br>");
}
else {
out.print(
"쿠키가 설정 되어있습니다.<br>");
Cookie[] cookies = request.getCookies();
for(int i = 0;i<cookies.length;i++){
out.print(
"Name : "+cookies[i].getName()+"<br>");
out.print(
"Vaule : "+cookies[i].getValue()+"<br>");
out.print(
"Domain : "+cookies[i].getDomain()+"<br>");
out.print(
"MaxAge : "+cookies[i].getMaxAge()+"<br>");
out.print(
"Path : "+cookies[i].getPath()+"<br>");
out.print(
"Secure : "+cookies[i].getSecure()+"<br>");
out.print(
"Comment : "+cookies[i].getComment()+"<br>");
out.print(
"Version : "+cookies[i].getVersion()+"<br><br>");
}
}
%>

만약 앞의 예제를 실행한 지 5분이 지나거나, 실행하지 않고 이 예제를 실행하면 앞의 결과 그림이 나오지 않습니다. 또 쿠키를 읽어오는 프로그램을 새 창에서 시작하지 않으면 세션값과 같이 출력됩니다.

예제를 보면 request.getHeader 메서드를 사용해서 헤더에서 쿠키의 설정을 체크합니다.

n String value = request.getHeader("Cookie");

그리고 request의 getCookies 메서드를 사용해서 쿠키를 얻어 왔습니다. 앞에서 말씀들인 대로 Cookie[] 형이 반환되는 점을 기억하시기 바랍니다.

n Cookie[] cookies = request.getCookies();

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

n out.print("Name : "+cookies[i].getName()+"<br>");

n out.print("Vaule : "+cookies[i].getValue()+"<br>");

n out.print("Domain : "+cookies[i].getDomain()+"<br>");

n out.print("MaxAge : "+cookies[i].getMaxAge()+"<br>");

n out.print("Path : "+cookies[i].getPath()+"<br>");

n out.print("Secure : "+cookies[i].getSecure()+"<br>");

n out.print("Comment : "+cookies[i].getComment()+"<br>");

n out.print("Version : "+cookies[i].getVersion()+"<br><br>");

n }

실행 결과를 보시면 각 정보가 표시되는 것을 알 수 있습니다. 하지만 여기서 한가지 의문점이 있습니다. 앞에서 setMaxAge(60*5)로 쿠키의 지속 시간을 5분으로 설정했습니다. 그런데 getMaxAge 메서드로 그 값을 읽어보니 1이 나왔습니다. 이것은 브라우저가 동작할 동안만 쿠키가 유효하다는 것을 나타냅니다. 즉, 쿠키 유효기간이 지났다는 것이지요. 하지만 확인한 분은 알겠지만, 쿠키가 설정한 유효시간이 지나지 않았을 경우도 이와 같이 나타납니다.

여러 결과를 놓고 분석해 보면, setMaxAge 메서드로 유효 시간은 정확히 설정되지만, getMaxAge 메서드는 제대로 먹지 않고 있습니다. 이렇게 Cookie에 관한 메서드는 JSP 컨테이너의 종류에 따라 제대로 작동하지 않는 몇가지 메서드가 있을 수 있으니(참 미묘한 부분이죠) 이것이 중요하게 쓰이는 부분이라면, Cookie를 이용하는 API를 직접 사용해보며 자신의 컨테이너에서 제대로 동작하는지 확인하고 넘어가시기 바랍니다.

'네트워크보안 > asp' 카테고리의 다른 글

세션(Session) 값 설정  (0) 2012.02.15
세션(Session)이란?  (0) 2012.02.15
쿠키 설정하기  (0) 2012.02.15
HTTP 메시지 헤더와 쿠키  (0) 2012.02.15
ASP.NET에서 쿠키의 기본개념  (0) 2012.02.15