什麼是Cookies?
Cookies是一些小文件,它們被創建在客戶端的系統裏,或者被創建在客戶端瀏覽器的內存中(如果是臨時性的話)。用它可以實現狀態管理的功能。我們可以存儲一些少量信息到可以短的系統上,以便在需要的時候使用。最有趣的事情是,它是對用戶透明的。在你的web應用程序中,你可以到處使用它,它極其得簡單。Cookies是以文本形式存儲的。如果一個web應用程序使用cookies,那麼服務器負責發送cookies,客戶端瀏覽器將存儲它。瀏覽器在下次請求頁面的時候,會返回cookies給服務器。最常用的例子是,使用一個cookie來存儲用戶信息,用戶的喜好,“記住密碼”操作等。Cookies有許多優點,當然也有許多缺點。我將在接下來講述。
Cookies是如何創建的?
當一個客戶端向服務器發出請求,服務器發送cookies給客戶端。而相同的cookies可以被後續的請求使用。例如,如果codeproject.com將Session ID作爲cookies存儲。當一個客戶端首次向web服務器請求頁面,服務器生成Session ID,並將其作爲cookies發送往客戶端。
現在,所有來自相同客戶端的後續請求,它將使用來自cookies的Session ID,就像下面這幅圖片展示的那樣。
瀏覽器和web服務器以交換cookies信息來作爲響應。對不同的站點,瀏覽器會維護不同的cookies。如果一個頁面需要cookies中的信息,當某個URL被“點擊”,首先瀏覽器將搜索本地系統的cookies的信息,然後才轉向服務器來獲得信息。
Cookies的優勢
下面是使用cookies的主要優勢:
(1) 實現和使用都是非常簡單的
(2) 由瀏覽器來負責維護髮送過來的數據(cookies內容)
(3) 對來自多個站點的cookies來講,瀏覽器自動管理它們
Cookies的劣勢
下面是cookies的主要劣勢:
(1) 它以簡單的文本格式來存儲數據,所以它一點也不安全
(2) 對於cookies數據,有大小限制(4kB)
(3) Cookies最大數目也有限制。主流瀏覽器提供將cookies的個數限制在20條。如果新cookies到來,那麼老的將被刪除。有些瀏覽器能支持到300條的cookies數。
(4) 我們需要配置瀏覽器,cookies將不能工作在瀏覽器配置的高安全級別環境下。
如何創建Cookies
爲了使用cookies,我們首先需要引入System.Web這個命名空間:
- using System.Web;
看下面的代碼,來看看我們如何創建cookies以及如何將它加入到web響應中去:
Cookies被創建後將持續到瀏覽器關閉。我們可以使其持續更長的時間。該如何實現呢?我接下來將來講解它
如何從Cookies中讀取信息
在讀取cookies之前,首先我們需要檢查是否能找到該cookie。在讀取cookies之前,先檢查它總是一個很好的習慣,因爲瀏覽器可能禁用cookies。
什麼是持久化的和非持久化的Cookies
我們可以將cookies分成兩類:
(1) 持久化的cookies
(2) 非持久化的cookies
持久化的cookies:這可以被稱爲永久性的cookies,它被存儲在客戶端的硬盤內,直到它們失效。持久化的cookies應該被設置一個失效時間。有時,它們會一直存在直到用戶刪除它們。持久化的cookies通常被用來爲某個系統收集一個用戶的標識信息。
非持久化cookies:也可以被稱之爲臨時性的cookies。如果沒有定義失效時間,那麼cookie將會被存儲在瀏覽器的內存中。我上面展示的例子就是一個非持久的cookies。
修改一個持久化的cookies與一個非持久化的cookies並沒有什麼不同。它們唯一的區別是——持久化的cookies有一個失效時間的設置。
怎樣創建持久化的cookies
我已經給出了創建一個非持久化cookies的例子。對於持久化的cookies而言,我們需要爲其定義一個過期時間。下面的代碼中,我定義了一個持久化的cookies,因爲我將其失效時間標識爲5天。
- //Creting a Cookie Object
- HttpCookie _userInfoCookies = new HttpCookie("UserInfo");
- //Setting values inside it
- _userInfoCookies["UserName"] = "Abhijit";
- _userInfoCookies["UserColor"] = "Red";
- _userInfoCookies["Expire"] = "5 Days";
- //Adding Expire Time of cookies
- _userInfoCookies.Expires = DateTime.Now.AddDays(5);
- //Adding cookies to current web response
- Response.Cookies.Add(_userInfoCookies);
最有趣的事情是,它們到底存儲在硬盤的什麼地方呢?
Cookies到底存儲在本地硬盤的什麼地方
其中一個有趣的事情是知曉cookies在你硬盤的哪個地方。首先,進入瀏覽文件夾選項,選擇“顯示隱藏文件和文件夾”。
現在,導航到當前用戶cookies的文件夾。看下面的這幅圖:
怎樣在它失效時間之前移除Cookies
這是一個有趣的任務。如果你想在失效時間之前移除持久化的cookies,唯一的方式就是用一個過去的時間作爲失效時間來代替老的失效時間。
- HttpCookie _userInfoCookies = new HttpCookie("UserInfo");
- //Adding Expire Time of cookies before existing cookies time
- _userInfoCookies.Expires = DateTime.Now.AddDays(-1);
- //Adding cookies to current web response
- Response.Cookies.Add(_userInfoCookies);
怎樣控制Cookies域
我們可以以下面的方式來控制cookies的域:
(1) 限制cookies的路徑
(2) 限制cookies的域
什麼是Cookies Munging?
默認的,asp.net使用cookies來存儲session id,但就像我之前提到的,有些瀏覽器不支持cookies。爲了克服這個問題,asp.net使用“Cookies Munging”技術來管理session變量,而不使用cookies。
爲什麼我們在asp.net使用Cookies Munging
這裏有一些特殊原因導致了我們在asp.net中使用Cookies Munging:
(1) 一些瀏覽器不支持cookies
(2) 有時用戶讓瀏覽器禁用cookies
Cookies Munging如何工作?
當用戶向服務器請求一個頁面,服務器編碼“session id”然後將它們加入到頁面的每一個HREF 的鏈接中。當用戶點擊一個鏈接,asp.net解碼session id並傳遞它給用戶請求的頁面。現在,正在被請求的頁面就可以檢索到任何的session變量。這一切都將平滑地發生——當asp.net檢測到用戶瀏覽器不支持cookies時。
怎樣實現Cookies Munging
爲了實現它,我們不得不讓session狀態變成非cookies形式:
- <sessionState cookieless= "true />
怎樣在瀏覽器中配置cookies
我們現在來看看如何在瀏覽器中配置——啓用或禁用cookies。我已經在之前討論過IE瀏覽器的設置了。點擊工具—>Internet Options—>轉到隱私選項卡。在這裏,你將能夠看到一個像下面這樣的滾動條:
第一個選項將允許所有的cookies,而最後一個選項將阻止所有的cookies。你可以在滾動的時候獲得更多的信息。