Cookie—的使用

編寫 Cookie瀏覽器

瀏覽器負責管理用戶系統上的 Cookie。Cookie 經過 HttpResponse 對象發送到瀏覽器,該對象公開稱爲 Cookies 的集合。 能夠將 HttpResponse 對象做爲 Page 類的 Response 屬性來訪問。 要發送給瀏覽器的全部 Cookie 都必須添加到此集合中。建立 Cookie 時,須要指定 NameValue。 每一個 Cookie 必須有一個惟一的名稱,以便之後從瀏覽器讀取 Cookie 時能夠識別它。因爲 Cookie 按名稱存儲,所以用相同的名稱命名兩個 Cookie 會致使其中一個 Cookie 被覆蓋。服務器

Response.Cookies["userName"].Value = "patrick";
Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1);

HttpCookie aCookie = new HttpCookie("lastVisit");
aCookie.Value = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);

多值 Cookie

能夠在 Cookie 中存儲一個值,如用戶名和上次訪問時間。也能夠在一個 Cookie 中存儲多個名稱/值對。名稱/值對稱爲子鍵。(子鍵佈局相似於 URL 中的查詢字符串。)例如,不要建立兩個名爲 userName 和 lastVisit 的單獨 Cookie,而能夠建立一個名爲 userInfo 的 Cookie,其中包含兩個子鍵 userName 和 lastVisit。cookie

您可能會出於多種緣由來使用子鍵。首先,將相關或相似的信息放在一個 Cookie 中很方便。此外,因爲全部信息都在一個 Cookie 中,因此諸若有效期之類的 Cookie 屬性就適用於全部信息。(反之,若是要爲不一樣類型的信息指定不一樣的到期日期,就應該把信息存儲在單獨的 Cookie 中。)app

帶有子鍵的 Cookie 還可幫助您限制 Cookie 文件的大小。正如前面「Cookie 的限制」一節中所提到的,Cookie 一般限制爲 4096 字節,而且每一個站點最多可存儲 20 個 Cookie。使用帶子鍵的單個 Cookie,使用的 Cookie 數就不會超過度配給站點的 20 個的限制。此外,一個 Cookie 會佔用大約 50 個字符的系統開銷(用於保存有效期信息等),再加上其中存儲的值的長度,其總和接近 4096 字節的限制。若是存儲五個子鍵而不是五個單獨的 Cookie,即可節省單獨 Cookie 的系統開銷,節省大約 200 字節。dom

控制 Cookie 的範圍

默認狀況下,一個站點的所有 Cookie 都一塊兒存儲在客戶端上,並且全部 Cookie 都會隨着對該站點發送的任何請求一塊兒發送到服務器。也就是說,一個站點中的每一個頁面都能得到該站點的全部 Cookie。可是,能夠經過兩種方式設置 Cookie 的範圍:佈局

  • 將 Cookie 的範圍限制到服務器上的某個文件夾,這容許您將 Cookie 限制到站點上的某個應用程序。測試

  • 將範圍設置爲某個域,這容許您指定域中的哪些子域能夠訪問 Cookie。spa

  • appCookie.Path = "/Application1";

 

限制 Cookie 的域範圍

  • 默認狀況下,Cookie 與特定域關聯。例如,若是您的站點是 www.contoso.com,那麼當用戶向該站點請求任何頁時,您編寫的 Cookie 就會被髮送到服務器。(這可能不包括帶有特定路徑值的 Cookie。)若是站點具備子域(例如,contoso.com、sales.contoso.com 和 support.contoso.com),則能夠將 Cookie 與特定的子域關聯。若要執行此操做,請設置 Cookie 的 Domain 屬性Response.Cookies["domain"].Domain = "support.contoso.com";code

     

    讀取cookie

    Request.Cookies["userName"].Value對象

    HttpCookie aCookie = Request.Cookies["userName"];

    subkeyName = Server.HtmlEncode(aCookie.Values.AllKeys[j]);
                subkeyValue = Server.HtmlEncode(aCookie.Values[j]);

    在嘗試獲取 Cookie 的值以前,應確保該 Cookie 存在;若是該 Cookie 不存在,將會收到 NullReferenceException 異常。

    因爲不一樣的瀏覽器存儲 Cookie 的方式不一樣,所以,同一計算機上的不一樣瀏覽器沒有必要可以讀取彼此的 Cookie。例如,若是使用 Internet Explorer 測試一個頁面,而後再使用其餘瀏覽器進行測試,那麼後者將不會找到 Internet Explorer 保存的 Cookie。即cookie不能跨瀏覽器。

    刪除cookie:

    建立一個與要刪除的 Cookie 同名的新 Cookie,並將該 Cookie 的到期日期設置爲早於當前日期的某個日期。當瀏覽器檢查 Cookie 的到期日期時,瀏覽器便會丟棄這個現已過時的 Cookie。

相關文章
相關標籤/搜索