본문 바로가기

네트워크보안/asp

쿠키 설정하기

이제 쿠키를 설정해 보겠습니다. JSP API를 통해서 쿠키를 클라이언트에 저장하기 위해서는 javax.servlet.http.Cookie 클래스를 사용합니다. Cookie 클래스의 객체를 생성하고 그 객체를 response에 addCookie 메서드를 호출해주면 쿠키는 하드디스크에 저장됩니다.

n Cookie cookie = new Cookie("name","value");

n response.addCookie(cookie);

쿠키의 객체를 생성할 때는 쿠키의 이름과 값을 넣어주어야 합니다. 그럼 예제를 살펴보겠습니다. 이 예제는 먼저 HTML에서 입력을 받아 JSP 페이지로 넘기게 되면 JSP는 그 페이지의 쿠키가 저장되어 있는지 확인을 합니다. 확인을 해서 쿠키가 있으면 쿠키가 설정되어 있다는 값을 출력하고, 쿠키가 없다면 쿠키를 하드디스크에 저장하게 됩니다.

예제를 실행시키기 전에 Internet Explorer의 옵션에 들어가서 모든 쿠키를 삭제 하고 보시기 바랍니다. 그럼 예제를 보겠습니다.

SetCookieTest.html

정보를 보내는 페이지

<HTML>
<HEAD>
<TITLE> Set Cookie Test </TITLE>
</HEAD>
<BODY>
<form name ="setCookie" method ="post" action="SetCookieTest.jsp">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Id :<input type = "text" name ="id"><br>
Password : <input type = "password" name ="passwd"><br>
<input type = "submit" name ="button" value = "확인" >
</form>
</BODY>
</HTML>

SetCookieTest.jsp

쿠키를 설정하는 페이지

<%@ page contentType= "text/html;charset = euc-kr"%>

<%

String id = request.getParameter("id");

String passwd = request.getParameter("passwd");

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

if(value == null) {

Cookie cookie = new Cookie(id,passwd);

cookie.setMaxAge(60*5);

response.addCookie(cookie);

out.print("쿠키를 설정합니다.<br>");

} else {

out.print("쿠키가 설정 되어있습니다.");

}

%>

먼저 SetCookieTest.html을 실행시킵니다. 그 페이지에 id와 password를 입력시키고 확인 버튼을 누르게 됩니다.

n <form name ="setCookie" method ="post" action="SetCookieTest.jsp">

Form 양식으로 데이터를 SetCookieTest.jsp 페이지로 전송하게 되면 JSP페이지는 HTML에서 보낸 데이터를 받아냅니다.

n String id = request.getParameter("id");

n String passwd = request.getParameter("passwd");

그리고 헤더에 쿠키가 존재하는지 확인하는 과정을 거치게됩니다.

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

헤더에서 Cookie를 얻어내서 value라는 변수에 할당합니다. 이 value라는 변수가 값을 가지고 있다면 Cookie가 설정되어 있는 것입니다.

n if(value == null) {

n Cookie cookie = new Cookie(id,passwd);

n cookie.setMaxAge(60*5);

n response.addCookie(cookie);

n out.print("쿠키를 설정합니다.<br>");

n } else {

n out.print("쿠키가 설정 되어있습니다.");

n }

만약 값이 없다면 Cookie가 없는 것입니다. 이런 경우에는 Cookie를 설정합니다. 그리고 하드디스크에 쿠키를 저장합니다. 위에서는 쿠키의 소멸시간으로 5분을 주었습니다. 5분후에는 쿠키의 효력이 사라지게 됩니다.

아래의 그림은 쿠키가 하드디스크에 저장된 것을 보여주는 그림입니다.

그림 6-7 쿠키 저장 디렉토리

위와 같은 형식으로 저장하는 쿠키는 하나의 도메인 당 총 20개가 저장이 가능합니다. 만일 더 많은 쿠키를 저장하여야 한다면 배열 형태로 쿠키 값을 저장하면 가능합니다. 배열 형태로 저장이 되는 쿠키는 하나의 쿠키에 배열 형식으로 저장이 되기 때문에 20개의 쿠키 중 하나만을 사용하게 되는 것입니다. 물론, 이것에도 제약은 있는데 이름과 값을 합하여 4096 Byte 이상 저장할 수 없습니다. 만일 이러한 제한이 있지 않다면 클라이언트의 하드를 쿠키로 꽉 채우는 웃지 못할 사태가 발생할 수 있습니다.

Cookie에는 값을 저장하는 것 이외에 몇 가지 프로퍼티가 더 존재하고 있습니다. 프로퍼티의 종류와 용도는 다음과 같습니다.

프로퍼티

설명

형식

기본값

expires

쿠키가 만료될 시점

Sunday, 24-Mar 02 17:20

브라우저 종료시

domain

쿠키가 사용할 수 있는 도메인

www.jabook.org

쿠키를 저장하는 서버의 주소

path

쿠키를 사용할 수 있는 도메인 내의 주소

/

/subpage

쿠키를 저장하는 페이지 경로

secure

SSL 상에서만 사용

ture or false

false

6-1 쿠키의 속성

이 프로퍼티들은 모두 생략이 가능하며 생략 할 경우 기본값이 설정되게 됩니다.

expires : 쿠키가 만료되어 자동 소멸될 시점을 지정

n 기본값 : 브라우져 종료 시 소멸.

n 값이 설정되었을 경우 만료 시점이 될 때까지 클라이언트에 존재.

domain : 쿠키가 사용될 도메인을 설정

n 기본값 : 쿠키를 저장하는 서버의 주소가 설정됨

path : 쿠키를 사용할 수 있는 도메인 내의 주소

n 기본값 : 저장하는 페이지 경로 설정.

secure : SSL (Secure Socket Layer)에 관련된 프로퍼티

n 기본값 : false.

이 모든 프로퍼티들은 생략이 가능하지만, domain, path는 설정을 해주시는 것이 안전합니다. 간혹, domain, path를 설정하지 않았을 때 해당 쿠키 값을 인식하지 못 하는 경우가 있습니다. 그리고 쿠키에는 다음과 같은 몇 가지 제약 조건이 있습니다.

쿠키의 제약조건

n 클라이언트에 총 300개까지 쿠키 저장 가능

n 하나의 도메인 당 20개의 값만을 가질 수 있음

n 하나의 쿠키 값은 4096바이트까지 저장될 수 있음

만일 하나의 도메인에서 설정한 쿠키 값이 20개 넘어가게 된다면 쿠키는 최근에 가장 적게 사용된 쿠키부터 지워지게 됩니다. 또 쿠키를 저장할 때 주의하실 점이 있습니다. 쿠키는 기존에 설정한 값이 있는 곳에 값을 저장하거나 배열형태의 쿠키에 단일 값을 저장하려고 할 때 아무런 경고가 없이 덮어 쓰여지기 때문에 주의를 해야 합니다.


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

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