ASP.NET中Cookie編程的基礎知識(3)
發表時間:2024-02-08 來源:明輝站整理相關軟件相關文章人氣:
[摘要]查看您的 Cookie 您可能會發現,了解創建 Cookie 的效果會對您很有幫助。而查看 Cookie 是比較容易的,因為它們都是文本文件,關鍵在于您能找到它們。不同的瀏覽器保存 Cookie 的方式也不同。我將介紹 Internet Explorer 是如何保存 Cookie 的。如果您使用...
查看您的 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)