본문 바로가기

DeveloP/ASP

Response 객체


쿠키는 클라이언트에 정보를 저장해 두었다가 요청에 의해 서버로 보내지는 정보입니다.

쿠키에 정보를 저장하고 다시 클라이언트에 보내기 위해서는 Response 객체의 Cookies 컬렉션을 사용해야 하고,

저장된 쿠키 정보를 읽어오기 위해서는 Request 객체의 Cookies 컬렉션을 사용해야 합니다.

<% Response.Cookie!s("UserID") = "admin" %> ' Response 객체의 Cookies 컬렉션을 사용

UserID : <% = Request.Cookie!s("UserID") %> ' Request 객체의 Cookies 컬렉션을 사용




서버가 클라이언트에 쿠키를 설정하면 서버에 새로운 요청을 할 때마다 쿠키가 자동적으로 서버에 전송됩니다.

이 때 서버는 클라이언트에 저장되는 쿠키에 Expires 속성을 사용하여 쿠키의 만료일의 날짜를 지정할 수 있습니다.

서버가 클라이언트에 쿠키를 저장시킬 때 설정을 해야 합니다.

물론, 클라이언트도 서버로부터 쿠키를 거절할 수 있는 능력이 있습니다.



쿠키는 수명(?)과 용도에 관련된 속성들을 가지고 있습니다. 이러한 값들을 지정하지 않으면 사용자가 브라우저를 종료시킬 때 쿠 키에 저장된 모든 정보가 분실됩니다.

쿠키 구문과 속성에 관해서는 다음의 IIS 5.0 설명서를 참조하세요.

구문
Response.Cookie!s(cookie)[(key)|.attribute] = value

매개 변수
cookie
쿠키 이름입니다.

key
선택적인 매개 변수입니다. key를 지정하면 쿠키는 사전으로 사용되고 key는 value로 설정됩니다.

attribute
쿠키 자체에 대한 정보를 지정합니다. attribute 매개 변수는 다음 중 하나가 될 수 있습니다.

이름 설명
Domain 쓰기 전용. 지정된 쿠키는 단지 이 도메인에 대한 요청으로만 보내집니다.
Expires 쓰기 전용. 쿠키 만료 날짜입니다. 세션이 종료된 후 클라이언트의 디스크에 쿠키가 저장되게 하려면 이 날짜를 반드시 설정해야 합니다. 이 속성을 현재 날짜 이후의 날짜로 설정하지 않으면 세션이 종료될 때 쿠키도 만료됩니다.
HasKeys 읽기 전용. 쿠키가 키를 포함하는지 여부를 지정합니다.
경로 쓰기 전용. 지정하면 쿠키는 지정된 경로에 대한 요청에만 보내집니다. 이 속성을 설정하지 않으면 응용 프로그램 경로가 사용됩니다.
Secure 쓰기 전용. 쿠키 보안 여부를 지정합니다.



이러한 속성을 이용한 예는 다음과 같습니다.

<% Response.Cookie!s("UserID") = "admin" %> ' 쿠키값 지정

<% Response.Cookie!s("UserID").Expires = #13/4/2001# %> ' 유효 날짜 지정


Expires 속성을 위와 같이 지정하면 UserID 는 2001년 4월 13일에 만료되어서 모든 정보가 파괴됩니다.

<% Response.Cookie!s("UserID").Domain = "/aspstudy.net/" %> '사용 도메인 지정

<% Response.Cookie!s("UserID").Path = "/Cookies" %> ' 사용 도메인의 특정 디렉토리에 대해서만 이용

쿠키는 클라이언트에 파일로 저장되어 있기 때문에 다른 서버에서 접근할 수 있습니다.

이런 문제점을 해결하기 위해 쿠키에 저장된 정보에 액세스할 수 있는 서버를 위와 같이 제한 할 수 있습니다.

즉, Domain을 /aspstudy.net/으로 설정했기 때문에 UserID는 오직 이 도메인에 존재하는 페이지들에게만
정보를 전송합니다.

Path는 서버뿐만이 아니라 특정 디렉토리까지 지정한 것입니다.



다음은 IIS 5.0 설명서에 기술되어 있는 쿠키에 대한 설명입니다.

다음 스크립트에서처럼 키가 있는 쿠키를 작성하면

<%
Response.Cookie!s("mycookie")("type1") = "sugar"

Response.Cookie!s("mycookie")("type2") = "ginger snap"
%>

다음 헤더를 보냅니다.


Set-Cookie:MYCOOKIE=TYPE1=sugar&TYPE2=ginger+snap

그 이후 myCookie에 대한 할당에서 키를 지정하지 않으면 type1과 type2는 없어집니다.
 
다음 예제를 참고하십시오.


<% Response.Cookie!s("myCookie") = "chocolate chip" %>

앞의 예제에서 type1과 type2 키는 없어지고 이들 값은 버려집니다.

myCookie 쿠키는 이제 chocolate chip이라는 값을 가집니다.

반대로 키가 있는 쿠키를 호출하면 쿠키에 포함된 키가 아닌 값들이 없어집니다.

예를 들어, 위 코드 뒤에 다음과 같은 Response.Cookie!s를 호출하면,


<% Response.Cookie!s("myCookie")("newType") = "peanut butter" %>

chocolate chip 값이 버려지고 newType은 peanut butter로 설정됩니다.


다음 구문을 이용하여 쿠키에 키가 있는지를 알 수 있습니다.

<%= Response.Cookie!s("myCookie").HasKeys %>

myCookie가 쿠키 사전이라면 앞의 값은 TRUE입니다. 그렇지 않을 경우 값은 FALSE입니다.





웹 사이트에서 자주 사용하는 쿠키의 예는 사용자의 방문횟수와 마지막 방문 시간을 알려주는 것입니다.

방문횟수, 시간등을 텍스트 파일 혹은 데이터베이스로 저장할 수도 있지만,
 이 방법은 서버에 많은 부담을 주어 속도가 느려질 수도 있습니다.

그러므로, 작은 분량의 정보를 이용할 때는 쿠키를 사용해 서버에 많은 부담을 지우지 않으면서 빠르고 편리하게
 처리 할 수 있습니다.

물론, 한 도메인에 20개 이상을 저장시킬 수 없다는 한계가 있으며 보안상으로도 문제가 있는 것 또한 사실입니다.

하지만, 정보 유출이 크게 문제시 되지 않는 정보라면 쿠키를 사용해 서버의 부담을 덜어 주는 방법이
좋을 것 같습니다.

다음은 쿠키를 이용해 사용자의 방문 횟수와 방문 시간을 저장했다가 다시 방문했을 때 쿠키값을 읽어서
보여주는 예입니다.

<html>

<head></head>
<body>
<%
Response.Cookie!s("UserName") = "최종배"
Response.Cookie!s("LastVisit") = Now
LastVisit = Request.Cookie!s("LastVisit")
If Request.Cookie!s("Visit") = "" Then
Response.Cookie!s("Visit") = 0
Else Response.Cookie!s("Visit") = Request.Cookie!s("Visit") + 1 End If %>
UserName : <% = Request.Cookie!s("UserName") %> <br>
 마지막 방문 시간 : <% = LastVist %> <br> 방문 횟수 : <% = Request.Cookie!s("Visit") %> </body>

</html>