程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> ASP.NET中Cookie編程的基礎知識(5)

ASP.NET中Cookie編程的基礎知識(5)

編輯:關於.NET
讀取 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)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved