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

來源:互聯網
上載者:User
asp.net|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 將儲存在名為 mikepope@www.contoso.txt 的檔案中。(該檔案名稱可能包含一個順序的編號,如 mikepope@www.contoso[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。


相關文章

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。