ASP.NET中Cookie編程的基礎知識(5)
2024-07-10 13:01:54
供稿:網友
讀取 cookie 集合
前面的示例假設您要讀取名稱已知的 cookie。有時,您可能需要讀取可供頁面使用的所有 cookie。要讀取可供頁面使用的所有 cookie 的名稱和值,您可以利用如下代碼遍歷 request.cookies 集合:
dim i as integer
dim output as string = ""
dim acookie as httpcookie
for i = 0 to request.cookies.count - 1
acookie = request.cookies(i)
output &= "cookie 名稱 = " & server.htmlencode(acookie.name) & "<br>"
output &= "cookie 值 = " & server.htmlencode(acookie.value) & _
& "<br><br>"
next
label1.text = output
注意:運行此代碼時,您很可能會看到一個名為“asp.net_sessionid”的 cookie,asp.net 用這個 cookie 來保存您的會話的唯一標識符。這個會話 cookie 不會永久保存到您的硬盤上。有關會話 cookie 的詳細信息,請參閱本文后面的 cookie 和會話狀態。
前面的示例有一個限制:如果 cookie 有子鍵,就會以一個單獨的名稱/值字符串來顯示子鍵。cookie 的 haskeys(英文)屬性可以告訴您該 cookie 是否有子鍵。如果有子鍵,您可以在子鍵集合中向下鉆取,獲取各個子鍵的名稱和值。
如前文所述,您可以從 cookie 屬性 values(英文)中獲取有關子鍵的信息,該屬性是類型 namevaluecollection 的集合。您可以根據索引值從 values 集合中直接讀取子鍵值。相應的子鍵值可以從 values 集合的成員 allkeys(英文)中得到,該成員將返回一個字符串集合。
以下示例是對前一示例的修改。示例中使用 haskeys 屬性來測試子鍵,如果檢測到子鍵,就從 values 集合中獲取子鍵:
dim i as integer
dim j as integer
dim output as string = ""
dim acookie as httpcookie
dim subkeyname as string
dim subkeyvalue as string
for i = 0 to request.cookies.count - 1
acookie = request.cookies(i)
output &= "名稱 = " & acookie.name & "<br>"
if acookie.haskeys then
for j = 0 to acookie.values.count - 1
subkeyname = server.htmlencode(acookie.values.allkeys(j))
subkeyvalue = server.htmlencode(acookie.values(j))
output &= "子鍵名稱 = " & subkeyname & "<br>"
output &= "子鍵值 = " & subkeyvalue & "<br><br>"
next
else
output &= "值 = " & server.htmlencode(acookie.value) & "<br><br>"
end if
next
label1.text = output
您也可以把子鍵作為 namevaluecollection 對象進行提取,如下所示:
if acookie.haskeys then
dim cookievalues as _
system.collections.specialized.namevaluecollection = acookie.values
dim cookievaluenames() as string = cookievalues.allkeys
for j = 0 to cookievalues.count – 1
subkeyname = server.htmlencode(cookievaluenames(j))
subkeyvalue = server.htmlencode(cookievalues(j))
output &= "子鍵名稱 = " & subkeyname & "<br>"
output &= "子鍵值 = " & subkeyvalue & "<br><br>"
next
else
output &= "值 = " & acookie.value & "<br><br>"
end if
注意:請記住,我之所以調用 server.htmlencode 方法,只是因為我要在頁面上顯示 cookie 的值。如果您只是測試 cookie 的值,就不必在使用前對其進行編碼。
修改和刪除 cookie
有時,您可能需要修改某個 cookie,更改其值或延長其有效期。(請記住,由于瀏覽器不會把有效期信息傳遞到服務器,所以您無法讀取 cookie 的過期日期。)
當然,實際上您并不是直接更改 cookie。盡管您可以從 request.cookies 集合中獲取 cookie 并對其進行操作,但 cookie 本身仍然存在于用戶硬盤上的某個地方。因此,修改某個 cookie 實際上是指用新的值創建新的 cookie,并把該 cookie 發送到瀏覽器,覆蓋客戶機上舊的 cookie。
以下示例說明了如何更改用于儲存站點訪問次數的 cookie 的值:
dim counter as integer
if request.cookies("counter") is nothing then
counter = 0
else
counter = cint(request.cookies("counter").value)
end if
counter += 1
response.cookies("counter").value = counter.tostring
response.cookies("counter").expires = datetime.now.adddays(1)
或者:
dim ctrcookie as httpcookie
dim counter as integer
if request.cookies("counter") is nothing then
ctrcookie = new httpcookie("counter")
else
ctrcookie = request.cookies("counter")
end if
counter = cint(ctrcookie.value) + 1
ctrcookie.value = counter.tostring
ctrcookie.expires = datetime.now.adddays(1)
response.cookies.add(ctrcookie)