쿠키(Cookie)

ASP와 Cookies

지금까지 우리가 사용자 입장에서 쿠키를 보았으나, 이젠 서버의 입장에서 쿠키를 알아보자.
즉 우리가ASP로 구축할 사이트(웹서버)가 접속하는 사용자들에게 원가 더 편의를 제공하기 위해, 쿠키를사용하는 방법을 알아보도록 하자.
쿠키는 서버에서 사용자가 이전에 어떠한 일을 했는지를 기억해 두거나, 사용자에 대한 정보를 유지할 수 없는 단점을 극복하기 위해 등장하였으며, 넷스케이프 2.0에서 먼저 지원을 하기 시작했다.
또한, 쿠키는 사용자의 요청 때마다 브라우저로 부터 서버에게 전송되는 정보의 패킷의 일종이며, HTTP 헤더에 포함되어 같이 전송이 되어진다.
ASP에서 쿠키를 클라이언트에 저장하기 위해서는 Response.Cookies(컬렉션)를 사용하여 가능하다.
Response 개체가 하는 역할은 서버가 사용자측에게 뭔가를 응답하는 일을 담당한다고 했었다.
즉, 사용자에게 어떠한 데이터를 저장하는 역할도 마찬가지로 Response개체가 담당하게 되는 것이다.
그것은 Response 개체의 cookies 라는 메소드를 사용함으로써 가능하게 되는데, 쿠키에 원하는 값을 저장하기 위해서는 다음과 같은 방법을 사용하여야 한다.

<% Response.Cookies("Users") = "value" %>

위와같이 코딩하면 Users 라는 쿠키에 VALUE 라는 값이 들어가게 된다.
쿠키를 클라이언트의 기기에 저장할 경우에 Response개체의 Cookies 를 사용해서 가능했다면, 이미 저장되어져 있는 쿠키를 불러오기 위해서는 Response.Cookies(컬렉션)을 통해서 가능하다.
예를 들면 다음과 같다.

<% Users = Response.Cookies("Users") %>

위와같은 형식으로 저장하는 쿠키는 하나의 도메인당 총20개가 저장이 가능하다.
만일, 더 많은 쿠키를 저장하여야 한다면 컬렉션 형태로 쿠키 값을 저장하면 가능하다.
다음처럼 하면 가능하다.

<% Response.Cookies("Users")("SUBNAME1")="VALUE1"%>
<% Response.Cookies("Users")("SUBNAME2")="VALUE2"%>
<% Response.Cookies("Users")("SUBNAME3")="VALUE3"%>

컬렉션이라는 것은 배열과 비슷한 구조를 가지지만, 배열보다는 뛰어난 기능을 가지는 형태의 데이터 구조로 Key 값과 Value 값으로 매칭되어지는 형식을 가지고 있다.
위와같은 방법으로 쿠키를 저장히게 되면 하나의 쿠키에 컬렉션 형태로 값을 저장할 수 있게 된다.
그리고 이렇게 저장한 쿠키는 다음과 같은 형식으로 저장되게 된다.
이전에 공부한 Get 방식으로 넘어오는 데이터들과 비슷한 모양을 하고 있다.

User 라는 쿠키에 저장된 값

SUBNAME1=VALUE1&amp;SUBNAME2=VALUE2&amp;SUBNAME3=VALUE3......

만약 저장할 쿠키 값이 많다면 같은 그룹의 값들은 위와 같이 컬렉션 형태로 쿠키를 저장하는것이 좋다.
컬렉션 형태로 저장이 되는 쿠키는 하나의 쿠키에 위와 같은 형식으로 저장이 되기 때문에 20개의 쿠키 중 하나만을 사용하게 되는 것이기 때문이다.
물론, 이것에도 제약은 있는데, 이름과 값을 합하여 4096Byte 이상 저장할 수 없다.
만일 이러한 제한이 있지 않다면 클라이언트의 하드 디스크를 쿠키로 꽉 채울 수가 있게 되는 위험한 일도 있을 것이다.
위와 같이 쿠키에 관계된 역할을 하는 Cookies 컬렉션에는 쿠키 값을 저장하는 것 이외에 몇 가지 프로퍼티(속성)가 존재하고 있다.
프로퍼티의 종류와 용도는 다음과 같다.

프로퍼티 설 명
Expires 쿠키가 만료될 시점
Domain 쿠키를 사용할 수 있는 도메인
Path 쿠키를 사용될 수 있는 도메인 내의 파트
Secure SSL 상에서만 사용할지 여부
프로퍼티 형 식 기본값
Expires #월/일/년#
#월/일/년 시:분:초#
브라우저 종료시 쿠키 소멸
Domain www.onstory.fun 쿠키를 저장하는 서버의 주소
Path /
/QAboard
쿠키를 저장하는 페이지의 경로
Secure True, False False

이 프로퍼티 들은 모두 생략이 가능하며, 생략할 경우 기본 값이 설정되게 된다.
표만으로는 각각의 속성들이 무엇을 의미하는지 알기가 어렵다.
각각에 대해서 자세히 알아보도록 하자.

Expires

쿠키의 만료되어 자동 소멸될 시점을 지정한다.
이 속성이 설정되지 않았을 경우에 쿠키는 메모리 상에만 존재를 하고 브라우저가 모두 종료되었을 때 소멸되게 된다.
이 이야기는 쿠키가 클라이언트의 기기에 저장이 되어지지 않는다는 것이다. 현재 브라우저가 접속하고 있는 상태에서만 존재한다는 것이다.
그러나, Expires 가 설정되었을 경우에는 쿠키는 클라이언트의 하드상에 저장이 되어져 만료 시점이 될 때까지 클라이언트에 남아 있게 된다.
해당 쿠키의 삭제를 해야 될 경우에는 이 프로퍼티를 과거로 설정하면 자동적으로 쿠키 값이 소멸되게 된다.
다음은 저장 기간을 지정하는 예이다.

<% Response.Cookies("Users").Expires = Date()   + 지속할 기간(일) %> ' 현재부터 기입한 지속할 기간(일)동안 쿠키가 클라이언트 기기에 저장되어진다.
<% Response.Cookies("Users").Expires = #12/31/2004   00:00:00# %>

Domain

쿠키가 사용될 도메인을 설정한다. 이 프로퍼티가 설정되지 않았을 경우에는 기본적으로 쿠키를

저장하는 서버의 주소가 설정되게 된다.

Path

이 프로퍼티는 쿠키가 사용되어질 경로를 설정한다.
설정된 경로의 하위 경로내에서는 해당 쿠키의 사용이 가능하지만 상위 경로에서는 사용이 불가능하다.
이 속성을 설정하지 않을 경우에는 쿠키를 저장하는 페이지의 경로가 설정되게 된다.
하위 경로에서 설정한 쿠키 값을 도메인 내의 모든 페이지에서 사용하려고 할 때는 / 로 설정해 주면 도메인 내의 모든 페이지에서 사용 가능하게 된다.

<% Users = Response.Cookies("Users").Path = / %>
<% Users = Response.Cookies("Users").Path = /QAbord %>

Secure

이 프로퍼티는 SSL(Secure Socket Layer)에 관련된 프로퍼티이다.
이 프로퍼티는 True, False 로 설정을 하게 되는데, True 로 설정될 경우, 해당 쿠키는 HTTP 프로토콜이 아닌 HTTPS 상에서만 사용이 가능하게 된다.
보안이 요하는 쿠키의 경우 이것을 True 로 설정해 주면 되겠지만, HTTPS를 사용하고 있어야만 한다.

<% Users = Response.Cookies("Users").Secure = True%>
<% Users = Response.Cookies("Users").Secure = False %>

지금까지 공부한 모든 프로퍼티들은 생략이 가능하지만 Domain, Path 는 설정을 해주는 것이 안전하다.
간혹, Domain, Path 를 설정하지 않았을때는 해당 쿠키 값을 인식못하는 경우가 있기때문이다.
그리고, Expires 도 지정해 주어야 한다. 그렇지 않으면 쿠키는 클라이언트에게 저장되어지지 않을 것이고, 이후에 그 값을 사용할 수가 없다.
그리고 쿠키를 저장할 때에는 주의할 것이 있다. 쿠키는 기존에 설정한 값이 있는 곳에 값을 저장하거나 컬렉션 형태의 쿠키에 단일 값을 저장하려고 할때 아무런 경고없이 덮어 쓰여지기 때문에 상당히 주의를 해야 한다.
예를 들어 다음처럼 쿠키를 저장한다고 생각해 보자

<% Response.Cookies("Users")("Name")= "Taeyo"%>
<% Response.Cookies("Users")("Tel")= "5551234"%>
<% Response.Cookies("Users")("Sex")= "Male"%>
<% Response.Cookies("Users") = "Kavin"%>

세번째 라인까지의 상황이라면 Users라는 쿠키에는 다음과같은 값이 들어가 있다.

Name=Taeyo&amp;Tel=5551234&amp;Sex=Male

그런데 네번째 라인을 지나고 나면 어떻게 되는가?
기존의 지정된 모든 쿠키 값들은 다 사라지고, 최종적으로 'Users'라는 쿠키에 저장되는 값은 'Kavin' 이라는 단일값이 저장되게 되는 것이다.

쿠키가 가진 몇 가지 제약 조건

  • 클라이언트에 총 300개까지 쿠키 저장가능
  • 하나의 도메인 당 20개의 값만을 가질 수 있음
  • 하나의 쿠키 값은 4096Byte까지 저장될 수 있음

하나의 도메인에서 설정한 쿠키값이 20개 넘어가게 된다면?

이전에 설명했지만 하나의 도메인에서 설정할 수 있는 쿠키는 20개가 한계라고 하였다.
만일 사정에 의해 20개를 넘기게 된다면 최근부터 따져서 가장 적게 사용된 쿠키부터 지워지게된다. 즉 예전에 만들어진 쿠키가 지워지느느것이 아니다.

평점을 남겨주세요
평점 : 2.5
총 투표수 : 1