查看您的 Cookie
您可能會(huì)發(fā)現(xiàn),了解創(chuàng)建 Cookie 的效果會(huì)對您很有幫助。而查看 Cookie 是比較容易的,因?yàn)樗鼈兌际俏谋疚募P(guān)鍵在于您能找到它們。不同的瀏覽器保存 Cookie 的方式也不同。我將介紹 Internet Explorer 是如何保存 Cookie 的。如果您使用的是其他瀏覽器,請查看該瀏覽器的幫助,以了解有關(guān) Cookie 處理方面的知識。
查看 Cookie 的一個(gè)簡便方法是讓 Internet Explorer 為您查找。在 Internet Explorer 中,從“工具”菜單中選擇“Internet 選項(xiàng)”,在“常規(guī)”選項(xiàng)卡中單擊“設(shè)置”,然后單擊“查看文件”。Internet Explorer 將打開一個(gè)窗口,顯示所有的臨時(shí)文件,包括 Cookie。在窗口中查找以“Cookie:”開頭的文件 或查找文本文件。雙擊一個(gè) Cookie,在默認(rèn)的文本文件中打開它。
您也可以在硬盤上查找 Cookie 的文本文件,從而打開 Cookie。Internet Explorer 將站點(diǎn)的 Cookie 保存在文件名格式為 <user>@<domain>.txt 的文件中,其中 <user> 是您的帳戶名。例如,如果您的名稱為 mikepope,您訪問的站點(diǎn)為 www.contoso.com,那么該站點(diǎn)的 Cookie 將保存在名為 mikepope@www.contoso.txt 的文件中。(該文件名可能包含一個(gè)順序的編號,如 mikepope@www.contoso[1].txt。)
這個(gè) Cookie 文本文件是與用戶相關(guān)的,所以會(huì)按照帳戶分別保存。例如,在 Windows xp 中,您可以在如下所示的目錄中找到 Cookie 文件:
c:/Documents and Settings/<user>/Cookies
要查找最新創(chuàng)建的 Cookie,可以按修改日期對目錄內(nèi)容進(jìn)行排序,并查找最近修改的文件。
您可以使用文本編輯器打開 Cookie。如果該文件包含多個(gè) Cookie,這些 Cookie 之間將用星號 (*) 分隔。每個(gè) Cookie 的第一行是 Cookie 的名稱,第二行是值,其余各行則包含 Cookie 的日常處理信息,例如過期日期和時(shí)間。Cookie 中還有一個(gè)簡單的校驗(yàn)和,如果更改 Cookie 名稱或值的長度,瀏覽器就會(huì)檢測到修改并刪除該 Cookie。
多值 Cookie(子鍵)
以上示例為每個(gè)要保存的值(用戶名、上次訪問時(shí)間)都使用了一個(gè) Cookie 。您也可以在一個(gè) Cookie 中保存多個(gè)名稱/值對。名稱/值對也稱作“鍵”或“子鍵”,具體取決于您讀取的內(nèi)容。(如果您熟悉 URL 的結(jié)構(gòu),就會(huì)發(fā)現(xiàn)子鍵與其中的查詢字符串非常相象。) 例如,如果不希望創(chuàng)建名為“userName”和“l(fā)astVisit”的兩個(gè)單獨(dú)的 Cookie,可以創(chuàng)建一個(gè)名為“userInfo”的 Cookie,并使其包含兩個(gè)子鍵:“userName”和“l(fā)astVisit”。
有很多原因會(huì)讓我們用子鍵來代替單獨(dú)的 Cookie。最顯而易見的是,把相關(guān)或類似的信息放在一個(gè) Cookie 中會(huì)比較有條理。另外,由于所有信息都在一個(gè) Cookie 中,所以諸如有效期之類的 Cookie 屬性就適用于所有信息。(當(dāng)然,如果要為不同類型的信息指定不同的過期日期,就應(yīng)該把信息保存在單獨(dú)的 Cookie 中。)
帶有子鍵的 Cookie 還可以幫助您減小 Cookie 的大小。如前面的 Cookie 的限制一節(jié)所述,Cookie 的總大小限制在 4096 字節(jié)以內(nèi),而且不能為一個(gè)網(wǎng)站保存超過 20 個(gè) Cookie。利用帶子鍵的單個(gè) Cookie,站點(diǎn)的 Cookie 數(shù)量就不會(huì)超過 20 個(gè)的限制。此外,一個(gè) Cookie 會(huì)占用大約 50 個(gè)字符的基本空間開銷(用于保存有效期信息等),再加上其中保存的值的長度,其總和接近 4K 的限制。如果使用五個(gè)子鍵而不是五個(gè)單獨(dú)的 Cookie,您可以省去四個(gè) Cookie 的基本空間開銷,總共能節(jié)省大約 200 個(gè)字節(jié)。
要?jiǎng)?chuàng)建帶子鍵的 Cookie,您可以使用用于編寫單個(gè) Cookie 的各種語法。以下示例顯示了編寫同一 Cookie 的兩種不同方法,其中的每個(gè) Cookie 都帶有兩個(gè)子鍵:
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 有效范圍
默認(rèn)情況下,一個(gè)站點(diǎn)的全部 Cookie 都一起保存在客戶機(jī)上,而且所有這些 Cookie 都會(huì)隨著對該站點(diǎn)發(fā)送的請求一起發(fā)送到服務(wù)器,也就是說,站點(diǎn)的每個(gè)頁面都能得到該站點(diǎn)的所有 Cookie。但有時(shí)候,您可能希望 Cookie 更具有針對性,這時(shí),您可以通過兩種方法設(shè)置 Cookie 的有效范圍:
把 Cookie 的有效范圍限制在服務(wù)器上的一個(gè)文件夾中,實(shí)際上這樣就將 Cookie 限制到站點(diǎn)上的某個(gè)應(yīng)用程序。
把有效范圍設(shè)置為某個(gè)域,從而允許您指定域中的哪些子域可以訪問 Cookie。
將 Cookie 限制到某個(gè)文件夾或應(yīng)用程序
要將 Cookie 限制到服務(wù)器上的某個(gè)文件夾,請按如下方法設(shè)置 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)
當(dāng)然,您也可以通過直接設(shè)置 Response.Cookies 來編寫 Cookie,如前文所述。
路徑可以是站點(diǎn)根目錄下的物理路徑,也可以是虛擬根目錄。這樣一來,Cookie 就只能用于 Application1 文件夾或虛擬根目錄中的頁面。例如,如果您的站點(diǎn)名為 www.contoso.com,則前面示例中生成的 Cookie 就只能用于路徑為 http://www.contoso.com/Application1/ 的頁面以及該文件夾下的所有頁面,而不適用于其他應(yīng)用程序中的頁面,如 http://www.contoso.com/Application2/ 或
http://www.contoso.com/ 下的頁面。
提示:通過對 Internet Explorer 和 Mozilla 瀏覽器進(jìn)行測試發(fā)現(xiàn),此處使用的路徑是區(qū)分大小寫的。一般而言,Windows 服務(wù)器上的 URL 不區(qū)分大小寫,但這種情況例外。您無法控制用戶如何在瀏覽器中輸入 URL,但是,如果您的應(yīng)用程序依賴于與特定路徑相關(guān)的 Cookie,則請確保您所創(chuàng)建的所有超鏈接中的 URL 與 Path 屬性值的大小寫相匹配。
將 Cookie 的有效范圍限制到域
默認(rèn)情況下,Cookie 與特定的域相關(guān)聯(lián)。例如,如果您的站點(diǎn)是 www.contoso.com,那么當(dāng)用戶向該站點(diǎn)請求頁面時(shí),您編寫的 Cookie 就被發(fā)送到服務(wù)器。(有特定路徑值的 Cookie 除外,我在上一節(jié)剛剛解釋過。) 如果您的站點(diǎn)有子域(例如 contoso.com、sales.contoso.com 和 support.contoso.com),就可以把 Cookie 同特定的子域相關(guān)聯(lián)。為此,需要設(shè)置 Cookie 的 Domain 屬性,如下所示:
Response.Cookies("domain").Value = DateTime.Now.ToString
Response.Cookies("domain").Expires = DateTime.Now.AddDays(1)
Response.Cookies("domain").Domain = "support.contoso.com"
如果按照這種方式設(shè)置域,則 Cookie 只能用于指定子域中的頁面。
您也可以利用 Domain 屬性來創(chuàng)建可在多個(gè)子域中共享的 Cookie。例如,對域進(jìn)行如下設(shè)置:
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
。
新聞熱點(diǎn)
疑難解答
圖片精選