Cookie 最早出現是在Netscape Navigator 2.0 中。後來 ASP 也引入了這個技術,它的作用是與 Session 對象相結合來識別使用者。每當使用者開始串連網站時,系統將自動在記憶體塊中建立一個使用者有關的工作階段狀態,同時建立一個使用者的 ID 存放在瀏覽器端,與當前的使用者惟一地聯絡起來。這樣,伺服器儲存了 Session,瀏覽器儲存了 Cookie(使用者的 ID)。當下一次使用者發出請求時,請求的使用者將被要求提交使用者的 ID,兩者對照以正確地還原原來的工作階段狀態。這就是在無狀態協議的 HTTP 條件下保持使用者標誌的方法。
可以通過 Response.Cookies.Add() 方法直接向瀏覽器寫入 Cookie,通過 Request.Cookies 方法讀取已經設定好的 Cookie。
寫入Cookie 的方法是,先建立一個HttpCookie 對象,通過這個對象來構造一個 Cookie。例如:
//建立一個 HttpCookie 對象 HttpCookie cookie = new HttpCookie("樂豬網"); //設定此 Cookie 值 cookie.Value = "編程入門網站"; //加入此 Cookie Response.Cookies.Add(cookie);
Cookie 有臨時的,也有永遠的。永久的 Cookie 以檔案形式儲存在電腦上,關閉 Internet Explorer 時仍然保留在電腦上。再次訪問該網站時,建立該 Cookie 的網站可以讀取。在具體的編程時候,是在寫入此 Cookie 的時候,設定 Cookie 的生命週期,其代碼如下:
DateTime dtNow = DateTime.Now; TimeSpan tsMinute = new TimeSpan(0, 1, 0, 0); cookie.Expires = dtNow + tsMinute; Response.Cookies.Add(cookie);
以上代碼是設定新產生的 Cookie 的生命期為一個小時,可以通過修改 TimeSpan 的屬性來設定 Cookie 具體的生命期。如果不設定時間,預設時間為 20 分鐘。
讀取指定的 Cookie 時的語句如下:
HttpCookie cookie = Request.Cookies["Cookie 的名稱"];
如果想將讀出的 Cookie 顯示出來時,可以使用以下語句:
Response.Write(cookie.Value.ToString());
Cookie 是儲存在用戶端的字串,它會影響使用者的行為,但又不受使用者的直接管理,雖然它只是一種標誌(字母數字字串)而不是程式,不可能用它來收集使用者的資訊,破壞使用者的隱私。但有的使用者仍然不放心,也可能是不願意別人佔用自己的空間,相當一部分使用者在瀏覽器中禁止使用 Cookie。這就給識別使用者帶來了困難。
ASP.NET 2.0 現在已經完全解決了在不使用 Cookie 的情況下,識別使用者的方法(ASP.NET 1.1 版本只部分地解決了這一問題)。解決的方法很簡單,只需要在應用程式的根目錄下的 Web.config 檔案中,對 <sessionState> 節點進行配置,其他任何程式都不需要修改。為什麼一定要在應用程式的根目錄下配置?因為工作階段狀態的設定是應用程式範圍的設定。網站中的網頁要麼全都使用該配置,要麼全都不使用。配置的語句是:
<sessionState cookieless="useUri" />
或
<sessionState cookieless="AutoDetect" />
配置時,當編寫到“cookieless=”語句時,將彈出 AutoDetect、useCookies、useDeviceProfile、useUri 四種選擇。選擇 AutoDetect 或 useUri 均可在無 Cookies 的條件下識別使用者。
雖然在 <sessionState> 節點中還可以配置工作階段狀態管理的其他方面,包括儲存介質和連接字串等,但是,就 Cookie 而言,只需設定 Cookieless 屬性即可。
系統是如何在無 Cookie 的條件下識別使用者的呢?原來當進行了前面的設定以後,系統將會要求使用者自動將用戶端的資源資訊嵌入到使用者設用的 URL 語句中。例如,在使用 Cookie 的情況下,某使用者設用網頁時的 URL 是:http://yourserver/folder/default.aspx,現在設定了不使用 Cookie 的配置,調用的語句的 URL 將變成:http://yourserver/folder/(session ID here)/default.aspx,其中“session ID here”代表使用者的資源資訊所處的位置。該資訊已經被插入到 URL 的語句中。由於使用者資源資訊對於使用者來說具有惟一性,因此可以利用它與 Session 對象結合,一起來識別使用者。
下面舉一個完整的小例子吧,請看下面的原始碼:
HttpCookie ck = Request.Cookies["cktest"]; if (ck == null) { ck = new HttpCookie("cktest"); ck.Value = "123"; ck.Expires = DateTime.Now.AddSeconds(20);//20秒的有效期間 Response.Cookies.Add(ck); Response.Write("new ck"); } else{ Response.Write(ck.Value.ToString()); } //在一個Cookie中儲存多個資訊 HttpCookie cookie = new HttpCookie("cktest"); cookie.Values.Add("v1", "1"); cookie.Values.Add("v2", "2"); cookie.Values.Add("v3", "3"); Response.AppendCookie(cookie); HttpCookie cookies = Request.Cookies["cktest"]; string value1 = cookies.Values["v1"]; string value2 = cookies.Values["v2"]; Response.Write(value1 + value2);
以上就是關於ASP.NET中Cookie狀態的說明與用法,對於Cookie 使用的利與弊說法不一,我們要合理使用Cookie希望本文對大家學習Cookie有所協助。