쿠키의 값은 Form 및 ServerVariables와 같은 다른 ASP 컬렉션의 값보다 훨씬 더 복잡합니다. 쿠키는 브라우저에 의해 클라이언트 시스템에 저장되고 각 요청과 함께 쿠키가 적용되는 도메인의 서버로 전송되는 작은 텍스트 조각입니다.
ASP를 사용하면 Request 객체의 Cookies 컬렉션에서 요청과 함께 전송된 모든 쿠키 값을 얻을 수 있으며, Response의 Cookies 컬렉션을 통해 쿠키를 생성하거나 수정하여 사용자에게 다시 보낼 수 있습니다. 물체.
쿠키에는 두 가지 방법으로 구성할 수 있는 정보가 포함되어 있습니다. 단일 값 쿠키는 일반적인 ASP와 같은 컬렉션을 통해 코드에 해당 값을 제공합니다. 그러나 컬렉션의 각 구성원은 그 자체로 컬렉션이 될 수 있으며, 이 정보가 포함된 쿠키를 다중 값 쿠키라고 합니다.
단일 값 쿠키를 생성하는 것은 다음과 같이 비교적 간단합니다:
Response.Cookies("item-name") = "item-value"
다중 값 쿠키를 생성하려면 다음 명령을 사용할 수 있습니다:
Response.Cookies("item -name" )("sub-item-name") = "sub-item-value"는
쿠키 응용 프로그램의 도메인과 경로 및 유효 기간을 설정합니다. 우리는 다음을 사용합니다:
Response.Cookies("item-name").domain = "도메인-URL"
Response.Cookies(“항목 이름”).path = “가상 경로”
Response.Cookies("item-name").expires = #date#
일반적으로 클라이언트는 쿠키가 생성된 디렉터리의 페이지에 대한 요청을 할 때만 요청과 함께 서버에 쿠키를 보냅니다. 경로 속성을 지정하면 사이트에서 이 쿠키가 유효한 위치를 지정할 수 있으며 쿠키는 요청과 함께 전송됩니다. 전체 사이트에 대한 페이지 요청과 함께 쿠키가 전송되는 경우 경로를 "/"로 설정합니다.
Expires 속성이 설정되지 않은 경우 현재 브라우저 인스턴스가 닫힐 때 쿠키가 자동으로 제거됩니다.
브라우저에 출력을 보낼 때 쿠키가 이미 생성된다는 점에 유의하세요. 왜냐하면 이러한 쿠키는 페이지 HTTP 헤더의 일부이기 때문입니다.
ASP 3.0에서는 버퍼링의 기본 상태가 켜져 있으며 Response.Flush를 사용하여 이를 지정하거나 페이지가 끝에 도달하지 않는 한 출력이 전송되지 않습니다. 즉, 쿠키를 생성하는 코드는 페이지 어디에나 있을 수 있으며 출력이 클라이언트에 "플러시"될 때까지 실행될 수 있습니다.
기존 쿠키를 읽으려면 Request.Cookies 컬렉션을 사용하세요. 항목을 생성하는 데 사용한 방법과 유사하게 내부 항목에 개별적으로 접근할 수 있습니다.
StrSingleValue = Request.Cookies("항목 이름")
StrSubItemValue = Request.Cookies("item-name")("sub-item-name")
Request.Cookies 컬렉션(다른 모든 Request 컬렉션과 마찬가지로)은 읽기 전용입니다. Response.Cookies 컬렉션은 실제로 이 컬렉션에 있는 일련의 쿠키 이름에 액세스할 수 있지만 해당 값에는 액세스할 수 없습니다.
Cookies 컬렉션 탐색
Cookies 컬렉션을 보다 편리하게 사용하려면 Haskeys라는 추가 속성을 사용할 수 있습니다. 액세스된 쿠키 자체가 컬렉션인 경우, 즉 다중 값 쿠키인 경우 True를 반환합니다. Haskeys 속성을 사용하면 전체 Request.Cookies 컬렉션을 반복하여 모든 쿠키와 해당 값 목록을 얻을 수 있습니다.
Request.Cookies의 각 objItem에 대해
Request.Cookies(objItem).HasKey 그렇다면
'다른 For Each를 사용하여 모든 하위 키를 반복합니다.
Request.Cookies(objItem)의 각 objItemKey에 대해
Response.Write objItem & “(“ & objItemKey & “) = “_
& Request.Cookies(objItem)(objItemKey) & “<BR>”
다음
또 다른
'쿠키 문자열을 정상적으로 출력합니다.
Response.Write objItem & “ = ” & Request.Cookies(objItem) & “<BR>”
종료 조건
Next
이것은 Request.Form 컬렉션에서 여러 값을 추출하는 이전의 복잡한 코드와 매우 유사합니다. 그러나 여기에서 Haskeys 속성을 사용하여 각 항목이 집합인지 여부를 확인할 수 있습니다. Form 예제에서 Form 컬렉션(및 쿠키를 제외한 다른 모든 컬렉션)의 멤버는 실제 컬렉션이 될 수 없으므로 Request.Form(item_name).Count 속성을 쿼리해야 합니다. ASP는 단지 "비하인드 스토리" 작업을 수행하고 각 다중 항목 컬렉션의 가치를 가져옵니다.
Form과 QueryString의 차이점
다양한 ASP 컬렉션에 액세스하는 기술을 이해한 후에는 또 다른 질문을 해결해야 합니다. Form과 QueryString 컬렉션의 차이점은 무엇입니까? ASP를 사용하게 된다면 당연히 이 차이점을 인지하고 있어야 하지만 이를 다시 이해하고 이해하려면 HTTP가 작동하는 방식을 참고해야 합니다.
HTTP를 통해 웹 서버에서 페이지나 기타 리소스를 요청하는 일반적인 방법에는 두 가지가 있습니다. GET 메소드를 사용하여 리소스를 직접 얻을 수도 있고, POST를 사용하여 해당 리소스에 값을 전달할 수도 있습니다. GET 방법이 기본값입니다. 이 장의 앞부분에서 HTTP 요청의 예를 볼 수 있습니다.
7/8/99 10:27:16 Sent GET /Store/Download.asp HTTP/1.1
하나 이상의 쌍을 두는 경우 names 요청된 페이지의 URL에 / 값이 추가되면 요청된 쿼리 문자열이 되어 QueryString 컬렉션의 ASP 페이지에 제공됩니다. 웹 페이지, 전자 메일 메시지 또는 기타 문서에서 하이퍼링크를 클릭하거나, 브라우저의 주소 표시줄에 주소를 입력하고 Enter 키를 누르거나, 브라우저에서 링크 또는 즐겨찾기 버튼을 클릭하는 등 모두 GET 메서드를 사용합니다.
따라서 이러한 작업에서 값을 ASP에 전달하는 유일한 방법은 QueryString 컬렉션을 사용하여 값을 URL에 추가하는 것입니다.
Request.QueryString 컬렉션에 나타나고 액세스되는 값은 앞서 본 Form 컬렉션 인스턴스와 동일한 방식으로 작동합니다. URL과 쿼리 문자열의 조합:
http://mysite.com/process_page.asp?FirstName=Priscilla&LastName=Descartes
QueryString 컬렉션에 제공된 값은 다음과 같이 액세스할 수 있습니다:
strFirstName = Request.QueryString("FirstName") 'Return "프리실라"
strLastName = Request.QueryString("LastName") '"데카르트" 반환
strRaw = 요청.쿼리문자열
'Return "FirstName=Priscilla&LastName=Descartes"
페이지
에서 <FORM> 세그먼트를 사용할 때 열린 FORM 태그의 METHOD 속성 값을 "GET" 또는 "POST"로 설정할 수 있습니다. 기본값은 "GET"입니다. "GET"이 사용되거나 해당 속성이 생략되면 브라우저는 이 값을 페이지의 모든 컨트롤에 바인딩하고 쿼리 문자열이 되어 요청된 페이지의 URL에 첨부됩니다.
이 요청이 웹 서버에 도착하면 해당 값은 ASP의 Request.QueryString 컬렉션에 의해 제공됩니다. 그러나 METHOD 특성을 "POST"로 설정하면 브라우저는 값을 보내는 서버의 HTTP 헤더에 래핑하고 Request.Form 컬렉션을 통해 ASP에 제공합니다.
그런데 POST 메서드는 모든 HTML 형식에서 사용할 수 있습니다. 그러나 브라우저나 서버의 URL 문자열 길이에는 특정 제한이 있습니다. 따라서 긴 문자열을 추가하면 오버플로가 발생하고 일부 문자열 문자가 잘릴 수 있습니다. 동시에 쿼리 문자열은 브라우저의 주소 표시줄과 저장된 모든 링크 및 즐겨찾기에 나타납니다. 그뿐만 아니라, 웹 서버를 통과할 때 HTTP 요청에 원하지 않는 값이 노출되기도 하고, 자신의 서버나 다른 라우팅 서버의 로그 파일에도 나타날 수도 있습니다. HTTP 요청 헤더의 값은 거의 표시되지 않으며 로그 파일에 표시되지 않습니다.
POST 메서드를 사용할 때 주의해야 할 작은 문제는 사용자가 <FORM>을 다시 다운로드할 때 양식의 값이 더 이상 유지되지 않고 해당 값이 비어 있으므로 다시 입력해야 한다는 것입니다. 그러나 URL에 첨부하면 값이 링크로 저장되어 유지되므로 URL이 문자열과 결합되는 모든 요청에 표시됩니다. 이는 응용 프로그램에 따라 장점일 수도 있고 단점이 될 수도 있습니다. 클라이언트의 특정 범위 내에서 페이지의 값을 자동으로 유지할 수 있습니다).
또 다른 요점은 URL과 쿼리 문자열의 조합에 공백이나 기타 불법 문자가 포함될 수 없다는 것입니다. 그렇지 않으면 Navigator 및 일부 다른 브라우저에 문제가 발생합니다. 잘못된 문자는 "/", ":", "?" 및 "&"와 같이 URL과 쿼리 문자열을 구분하는 데 사용되는 문자입니다(IE에서는 공백을 자동으로 올바른 형식(더하기 기호 "+")으로 변환할 수 있지만 다른 불법 문자는 처리할 수 없습니다.)
ASP에서 쿠키 사용
이 섹션에서는 ASP 코드에서 사용할 컬렉션, 메서드 및 속성을 제공하는 다양한 기술을 알아봅니다.
1) 사용자 정보는 쿠키에 저장됩니다.
쿠키는 두 가지 유형의 값, 즉 브라우저를 닫을 때 저장하고 싶지 않은 값(예: 사용자 등록 정보)을 저장하는 데 사용될 수 있습니다. 사용자가 사이트를 방문할 때 유지됩니다. 각 경우에 사용자 브라우저의 모든 페이지 요청에 대해 ASP에서 쿠키 값을 사용할 수 있습니다.
하지만 쿠키는 쿠키의 가상 경로(path) 내의 페이지에 대한 요청이 있을 때만 서버로 전송된다는 점을 기억해야 합니다. 기본적으로 쿠키에 path 값이 설정되지 않은 경우 해당 값은 쿠키를 생성한 페이지의 가상 경로가 됩니다. 쿠키가 사이트의 모든 페이지로 전송되려면 path="/"를 사용해야 합니다.
다음
은 사용자 정의 로그인 페이지에서 사용자의 등록 정보가 쿠키에 저장되는 예입니다. 애플리케이션 유효 기간이 없으므로 쿠키 값은 브라우저가 닫힐 때까지만 유지됩니다.
Request.Cookies(“사용자”)(“UID”) = “<% = 요청(“사용자 이름”) %>”
Request.Cookies(“사용자”)(“PWD”) = “<% = 요청(“비밀번호”) %>”
Request.Cookies(“User”).Path = “/adminstuff” '관리 페이지에만 적용됩니다.
...
이 쿠키는 이제 사용자가 adminstuff 디렉토리나 그 하위 디렉토리에서 요청하는 모든 페이지에서 발견됩니다. 존재하지 않는 경우 사용자를 등록 페이지로 리디렉션할 수 있습니다.
If (Request.Cookies("User")("UID") <> "alexhomer") _
또는 (Request.Cookies(“사용자”)(“PWD”) <> “비밀”) 그런 다음
Response.Redirect “login.asp?UserName=” & Request.Cookies(“사용자”)(“UID”)
종료 조건
...
쿠키의 사용자 이름은 Response.Redirect의 URL 쿼리 문자열에 배치되므로 비밀번호 입력 시 오류가 발생하고 사용자가 사용자 이름을 다시 입력하지 않아도 되도록 하려면 로그인에 이를 사용할 수 있습니다. ASP 페이지:
<FORM ACTION=”check_user.asp” METHOD=”POST”>
<입력 유형=”텍스트” 이름=”사용자 이름”
VALUE=”<% = Request.QueryString(“사용자 이름”) %>”><P>
<입력 유형=”제출” 값=”로그인”>
</FORM>
2) 기존 쿠키 수정
ASP를 사용하여 기존 쿠키를 수정할 수 있지만 쿠키에서 하나의 값만 수정할 수는 없습니다. Response.Cookies 컬렉션에서 쿠키를 업데이트하면 기존 값이 손실됩니다. 사용할 수 있는 다음 코드를 사용하여 쿠키를 생성할 수 있습니다.
Response.Cookies("VisitCount")("StartDate") = dtmStart
Response.Cookies("VisitCount")("LastDate") = 현재
Response.Cookies("VisitCount")("방문수") = CStr(intVisits)
Response.Cookies("VisitCount").Path = "/" '전체 사이트에 적용
Response.Cookies("VisitCount").Expires = DateAdd("m",3,Now)
Visits 및 LastDate 값을 업데이트하려면 먼저 모든 값을 변경하지 않은 다음 전체 쿠키를 다시 작성해야 합니다. :
datDtart = 응답 .Cookies("VisitCount")("StartDate")
intVisits = Response.Cookies("VisitCount")("방문수")
Response.Cookies("VisitCount")("StartDate") = dtmStart
Response.Cookies("VisitCount")("LastDate") = 현재
Response.Cookies("VisitCount")("방문수") = Cstr(intVisits)
Response.Cookies(“VisitCount”).Path = “/”
Response.Cookies("VisitCount").Expires = DateADD("m",3,Now + 1) 그리고 거의 모든 다른 Response 메서드 및 속성과 마찬가지로 아무것도 작성하기 전에 완료해야 합니다(예: <HTML> 태그 열기 또는 모든 텍스트 또는 기타 HTML)을 응답에 추가합니다.