浏覽器Cookies用於關聯一些文本到網站的每一個用戶。
使用浏覽器cookie
當Web服務器端創建一個cookie時,一個附加的HTTP首部在浏覽器顯示頁面時被發送到浏覽器。HTTP首部類似如下形式:
Set-Cookie:message=Hello
Set-Cookie首部使得浏覽器創建一個名為message的cookie包含值Hello。
在浏覽器創建cookie以後,它從相同的應用程序請求頁面時都將會把cookie的信息發送給Web服務器端。
一個cookie就是一段文本,cookie只用用於存儲字符串值。
實際上,我們可以存儲兩種類型的cookie,一種是會話cookie,一種是持久化cookie。會話cookie只存儲在內存中,關閉浏覽器就消失了,持久化cookie則被保存到用戶電腦上,可以持久化。注意,持久化cookie是對浏覽器獨立的,即不同浏覽器創建的cookie保存的位置不同,也不能共享。
另外,cookie保存的信息都是以明文形式的,所以敏感信息不要保存到cookie上。
cookie的安全性限制
cookie對浏覽器獨立
cookie對域名獨立
一個域名存儲的cookie總大小不能超過4096byte。這個大小的限制,包含所有的cookie名稱和值在內。大多數浏覽器限制一個域名不超過20個cookie。
創建cookie
可以通過給Response.Cookies集合添加cookie來創建新的cookie。Response.Cookies集合包含所有Web服務器端發送到浏覽器的cookie。
Response.Cookies["message"].Value = txtCookieValue.Text;
以上代碼只創建一個會話cookie,關閉浏覽器就會消失。如果需要創建持久化cookie,則需要為cookie指定一個過期時間。
Response.Cookies["counter"].Value = counter.ToString();
Response.Cookies["counter"].Expires = DateTime.Now.AddYears(2);
讀取cookie
Request.Cookies集合可以讀取cookie。
if (Request.Cookies["message"] != null)
lblCookieValue.Text = Request.Cookies["message"].Value;
設置cookie屬性
HttpCookie類代表cookie,當創建或讀取一個cookie時,可以使用該類下面的這些屬性:
Domain——設置關聯cookie的域名;
Expires——通過給定一個過期時間來創建一個持久化cookie;
HasKeys——用於指定一個cookie是否是一個多值cookie;
HttpOnly——用於避免cookie被Javascript訪問;
Name——cookie的名稱;
Path——關聯到cookie的路徑,默認為/;
Value——讀寫cookie的值;
Secure——用於指定cookie需要通過安全Socket層連接傳遞;
Values——使用多值cookie時,用於讀寫特定的值。
刪除cookie
設定cookie的Expires的值為過去時間即可。
使用多值cookie
因為對單個域名浏覽器不能存儲超過20個cookie,可以通過創建多值cookie來突破該限制。多值cookie是一個包含子鍵的單一cookie。可以根據需要創建任意數量的子鍵。
Response.Cookies["preferences"]["firstName"] = txtFirstName.Text;
Response.Cookies["preferences"]["lastName"] = txtLastName.Text;
Response.Cookies["preferences"]["favoriteColor"] = txtFavoriteColor.Text;
Response.Cookies["preferences"].Expires = DateTime.MaxValue;