ASP.NET中Cookie編程的基礎(chǔ)知識(shí)(5)
發(fā)表時(shí)間:2024-02-08 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]讀取 Cookie 集合 前面的示例假設(shè)您要讀取名稱(chēng)已知的 Cookie。有時(shí),您可能需要讀取可供頁(yè)面使用的所有 Cookie。要讀取可供頁(yè)面使用的所有 Cookie 的名稱(chēng)和值,您可以利用如下代碼遍歷 Request.Cookies 集合:Dim i As IntegerDim output ...
讀取 Cookie 集合
前面的示例假設(shè)您要讀取名稱(chēng)已知的 Cookie。有時(shí),您可能需要讀取可供頁(yè)面使用的所有 Cookie。要讀取可供頁(yè)面使用的所有 Cookie 的名稱(chēng)和值,您可以利用如下代碼遍歷 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 名稱(chēng) = " & Server.HtmlEncode(aCookie.Name) & "<br>"
output &= "Cookie 值 = " & Server.HtmlEncode(aCookie.Value) & _
& "<br><br>"
Next
Label1.Text = output
注意:運(yùn)行此代碼時(shí),您很可能會(huì)看到一個(gè)名為“ASP.NET_SessionId”的 Cookie,ASP.NET 用這個(gè) Cookie 來(lái)保存您的會(huì)話(huà)的唯一標(biāo)識(shí)符。這個(gè)會(huì)話(huà) Cookie 不會(huì)永久保存到您的硬盤(pán)上。有關(guān)會(huì)話(huà) Cookie 的詳細(xì)信息,請(qǐng)參閱本文后面的 Cookie 和會(huì)話(huà)狀態(tài)。
前面的示例有一個(gè)限制:如果 Cookie 有子鍵,就會(huì)以一個(gè)單獨(dú)的名稱(chēng)/值字符串來(lái)顯示子鍵。Cookie 的 HasKeys(英文)屬性可以告訴您該 Cookie 是否有子鍵。如果有子鍵,您可以在子鍵集合中向下鉆取,獲取各個(gè)子鍵的名稱(chēng)和值。
如前文所述,您可以從 Cookie 屬性 Values(英文)中獲取有關(guān)子鍵的信息,該屬性是類(lèi)型 NameValueCollection 的集合。您可以根據(jù)索引值從 Values 集合中直接讀取子鍵值。相應(yīng)的子鍵值可以從 Values 集合的成員 AllKeys(英文)中得到,該成員將返回一個(gè)字符串集合。
以下示例是對(duì)前一示例的修改。示例中使用 HasKeys 屬性來(lái)測(cè)試子鍵,如果檢測(cè)到子鍵,就從 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 &= "名稱(chēng) = " & 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 &= "子鍵名稱(chēng) = " & subkeyName & "<br>"
output &= "子鍵值 = " & subkeyValue & "<br><br>"
Next
Else
output &= "值 = " & Server.HtmlEncode(aCookie.Value) & "<br><br>"
End If
Next
Label1.Text = output
您也可以把子鍵作為 NameValueCollection 對(duì)象進(jìn)行提取,如下所示:
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 &= "子鍵名稱(chēng) = " & subkeyName & "<br>"
output &= "子鍵值 = " & subkeyValue & "<br><br>"
Next
Else
output &= "值 = " & aCookie.Value & "<br><br>"
End If
注意:請(qǐng)記住,我之所以調(diào)用 Server.HtmlEncode 方法,只是因?yàn)槲乙陧?yè)面上顯示 Cookie 的值。如果您只是測(cè)試 Cookie 的值,就不必在使用前對(duì)其進(jìn)行編碼。
修改和刪除 Cookie
有時(shí),您可能需要修改某個(gè) Cookie,更改其值或延長(zhǎng)其有效期。(請(qǐng)記住,由于瀏覽器不會(huì)把有效期信息傳遞到服務(wù)器,所以您無(wú)法讀取 Cookie 的過(guò)期日期。)
當(dāng)然,實(shí)際上您并不是直接更改 Cookie。盡管您可以從 Request.Cookies 集合中獲取 Cookie 并對(duì)其進(jìn)行操作,但 Cookie 本身仍然存在于用戶(hù)硬盤(pán)上的某個(gè)地方。因此,修改某個(gè) Cookie 實(shí)際上是指用新的值創(chuàng)建新的 Cookie,并把該 Cookie 發(fā)送到瀏覽器,覆蓋客戶(hù)機(jī)上舊的 Cookie。
以下示例說(shuō)明了如何更改用于儲(chǔ)存站點(diǎn)訪(fǎng)問(wèn)次數(shù)的 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)