2010年2月11日 星期四

ASP.NET VB 修改和刪除 Cookie

有時候您可能要修改 Cookie,或許是變更其值或延長其到期時間 (請記住,您無法讀取到期日,因為瀏覽器並未傳送到期日資訊至伺服器)。

當然,您實際上並非直接變更 Cookie。雖然您可以從 Request.Cookies 集合取得 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)
刪除 Cookie

刪除 Cookie —實際將它從使用者的硬碟中移除 — 也是修改的一種。您不可以直接移除 Cookie,因為此 Cookie 在使用者的電腦中。不過,您可以讓瀏覽器為您刪除 Cookie。技巧在於以上述方式修改 Cookie (也就是使用相同名稱建立新的 Cookie),但是將 Cookie 的到期日設定為比今天還早。當瀏覽器檢查 Cookie 到期日時,瀏覽器就會捨棄已經過時的 Cookie。

因此,刪除任何一個 Cookie 與建立 Cookie 的方法相同,只是使用比今天還早的日期。下列範例比刪除單一 Cookie 還有趣 — 其中顯示刪除目前網域中所有 Cookie 的一種方法:
Dim i As Integer
Dim cookieName As String
Dim limit As Integer = Request.Cookies.Count - 1
For i = 0 To limit
aCookie = Request.Cookies(i)
aCookie.Expires = DateTime.Now.AddDays(-1)
Response.Cookies.Add(aCookie)
Next
修改或刪除子機碼

修改個別子機碼與建立子機碼的方法相同:
Response.Cookies("userInfo")("lastVisit") = DateTime.Now.ToString
Response.Cookies("userInfo").Expires = DateTime.Now.AddDays(1)
更複雜的問題是如何個別刪除子機碼。您不僅是重設 Cookie 的到期時間,因為那會移除整個 Cookie 而不是單一子機碼。解決方法是管理保存子機碼的 Cookie Values 集合。首先從 Request.Cookies 物件中取得 Cookie 以重新建立 Cookie。然後呼叫 Values 集合的 Remove 方法,將要刪除的子機碼名稱傳送給 Remove 方法。然後和平常一樣,您可以將修改過的 Cookie 加入 Response.Cookies 集合中,將修改完成的 Cookie 傳回給瀏覽器。

下列程式碼顯示如何刪除子機碼。在此範例中,以變數來指定要移除的子機碼名稱。
Dim subkeyName As String
subkeyName = "userName"
Dim aCookie As HttpCookie = Request.Cookies("userInfo")
aCookie.Values.Remove(subkeyName)
aCookie.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookie)<SPAN style="DISPLAY: none" id=1255069907985S _fck_bookmark="true"> </SPAN>

沒有留言:

張貼留言