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

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

編輯:關於.NET
查看您的 CookIE

  您可能會發現,了解創建 Cookie 的效果會對您很有幫助。而查看 Cookie 是比較容易的,因為它們都是文本文件,關鍵在於您能找到它們。不同的浏覽器保存 Cookie 的方式也不同。我將介紹 Internet Explorer 是如何保存 CookIE 的。如果您使用的是其他浏覽器,請查看該浏覽器的幫助,以了解有關 CookIE 處理方面的知識。

  查看 Cookie 的一個簡便方法是讓 Internet Explorer 為您查找。在 Internet Explorer 中,從“工具”菜單中選擇“Internet 選項”,在“常規”選項卡中單擊“設置”,然後單擊“查看文件”。Internet Explorer 將打開一個窗口,顯示所有的臨時文件,包括 Cookie。在窗口中查找以“Cookie:”開頭的文件 或查找文本文件。雙擊一個 CookIE,在默認的文本文件中打開它。

  您也可以在硬盤上查找 Cookie 的文本文件,從而打開 Cookie。Internet Explorer 將站點的 Cookie 保存在文件名格式為 <user>@<domain>.txt 的文件中,其中 <user> 是您的帳戶名。例如,如果您的名稱為 mikepope,您訪問的站點為 www.contoso.com,那麼該站點的 CookIE 將保存在名為 [email protected] 的文件中。(該文件名可能包含一個順序的編號,如 [email protected][1].txt。)

  這個 Cookie 文本文件是與用戶相關的,所以會按照帳戶分別保存。例如,在 Windows XP 中,您可以在如下所示的目錄中找到 CookIE 文件:

c:\Documents and Settings\<user>\CookIEs

  要查找最新創建的 CookIE,可以按修改日期對目錄內容進行排序,並查找最近修改的文件。

  您可以使用文本編輯器打開 Cookie。如果該文件包含多個 Cookie,這些 Cookie 之間將用星號 (*) 分隔。每個 Cookie 的第一行是 Cookie 的名稱,第二行是值,其余各行則包含 Cookie 的日常處理信息,例如過期日期和時間。Cookie 中還有一個簡單的校驗和,如果更改 CookIE 名稱或值的長度,浏覽器就會檢測到修改並刪除該 CookIE。

  多值 CookIE(子鍵)

  以上示例為每個要保存的值(用戶名、上次訪問時間)都使用了一個 Cookie 。您也可以在一個 Cookie 中保存多個名稱/值對。名稱/值對也稱作“鍵”或“子鍵”,具體取決於您讀取的內容。(如果您熟悉 URL 的結構,就會發現子鍵與其中的查詢字符串非常相象。) 例如,如果不希望創建名為“userName”和“lastVisit”的兩個單獨的 Cookie,可以創建一個名為“userInfo”的 CookIE,並使其包含兩個子鍵:“userName”和“lastVisit”。

  有很多原因會讓我們用子鍵來代替單獨的 Cookie。最顯而易見的是,把相關或類似的信息放在一個 Cookie 中會比較有條理。另外,由於所有信息都在一個 Cookie 中,所以諸如有效期之類的 Cookie 屬性就適用於所有信息。(當然,如果要為不同類型的信息指定不同的過期日期,就應該把信息保存在單獨的 CookIE 中。)

  帶有子鍵的 Cookie 還可以幫助您減小 Cookie 的大小。如前面的 Cookie 的限制一節所述,Cookie 的總大小限制在 4096 字節以內,而且不能為一個網站保存超過 20 個 Cookie。利用帶子鍵的單個 Cookie,站點的 Cookie 數量就不會超過 20 個的限制。此外,一個 Cookie 會占用大約 50 個字符的基本空間開銷(用於保存有效期信息等),再加上其中保存的值的長度,其總和接近 4K 的限制。如果使用五個子鍵而不是五個單獨的 Cookie,您可以省去四個 CookIE 的基本空間開銷,總共能節省大約 200 個字節。

  要創建帶子鍵的 Cookie,您可以使用用於編寫單個 Cookie 的各種語法。以下示例顯示了編寫同一 Cookie 的兩種不同方法,其中的每個 CookIE 都帶有兩個子鍵:

Response.CookIEs("userInfo")("userName") = "mike"
Response.CookIEs("userInfo")("lastVisit") = DateTime.Now.ToString
Response.CookIEs("userInfo").Expires = DateTime.Now.AddDays(1)

Dim aCookie As New HttpCookIE("userInfo")
aCookIE.Values("userName") = "mike"
aCookIE.Values("lastVisit") = DateTime.Now.ToString
aCookIE.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookIE)

  控制 CookIE 有效范圍

  默認情況下,一個站點的全部 Cookie 都一起保存在客戶機上,而且所有這些 CookIE 都會隨著對該站點發送的請求一起發送到服務器,也就是說,站點的每個頁面都能得到該站點的所有 Cookie。但有時候,您可能希望 Cookie 更具有針對性,這時,您可以通過兩種方法設置 CookIE 的有效范圍:

  把 CookIE 的有效范圍限制在服務器上的一個文件夾中,實際上這樣就將 CookIE 限制到站點上的某個應用程序。

  把有效范圍設置為某個域,從而允許您指定域中的哪些子域可以訪問 CookIE。

  將 CookIE 限制到某個文件夾或應用程序

  要將 CookIE 限制到服務器上的某個文件夾,請按如下方法設置 CookIE 的 Path 屬性:

Dim appCookie As New HttpCookie("AppCookIE")
appCookIE.Value = "written " & Now.ToString
appCookIE.Expires = Now.AddDays(1)
appCookIE.Path = "/Application1"
Response.Cookies.Add(appCookIE)

  當然,您也可以通過直接設置 Response.Cookies 來編寫 CookIE,如前文所述。

  路徑可以是站點根目錄下的物理路徑,也可以是虛擬根目錄。這樣一來,Cookie 就只能用於 Application1 文件夾或虛擬根目錄中的頁面。例如,如果您的站點名為 www.contoso.com,則前面示例中生成的 CookIE 就只能用於路徑為 http://www.contoso.com/Application1/ 的頁面以及該文件夾下的所有頁面,而不適用於其他應用程序中的頁面,如 http://www.contoso.com/Application2/ 或 http://www.contoso.com/ 下的頁面。

  提示:通過對 Internet Explorer 和 Mozilla 浏覽器進行測試發現,此處使用的路徑是區分大小寫的。一般而言,Windows 服務器上的 URL 不區分大小寫,但這種情況例外。您無法控制用戶如何在浏覽器中輸入 URL,但是,如果您的應用程序依賴於與特定路徑相關的 CookIE,則請確保您所創建的所有超鏈接中的 URL 與 Path 屬性值的大小寫相匹配。

  將 CookIE 的有效范圍限制到域

  默認情況下,Cookie 與特定的域相關聯。例如,如果您的站點是 www.contoso.com,那麼當用戶向該站點請求頁面時,您編寫的 CookIE 就被發送到服務器。(有特定路徑值的 Cookie 除外,我在上一節剛剛解釋過。) 如果您的站點有子域(例如 contoso.com、sales.contoso.com 和 support.contoso.com),就可以把 Cookie 同特定的子域相關聯。為此,需要設置 CookIE 的 Domain 屬性,如下所示:

Response.CookIEs("domain").Value = DateTime.Now.ToString
Response.CookIEs("domain").Expires = DateTime.Now.AddDays(1)
Response.CookIEs("domain").Domain = "support.contoso.com"

  如果按照這種方式設置域,則 CookIE 只能用於指定子域中的頁面。

  您也可以利用 Domain 屬性來創建可在多個子域中共享的 CookIE。例如,對域進行如下設置:

Response.CookIEs("domain").Value = DateTime.Now.ToString
Response.CookIEs("domain").Expires = DateTime.Now.AddDays(1)
Response.CookIEs("domain").Domain = "contoso.com"

  這樣,該 CookIE 就可用於主域、sales.contoso.com 和 support.contoso.com。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved