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

來源:互聯網
上載者:User
asp.net|cookie|編程 讀取 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)


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。