APS.NET Cookie,aps.netcookie
Cookie 提供了一種在 Web 應用程式中儲存使用者特定資訊(如記錄或使用者喜好設定)的方法。Cookie 是一小段文本,伴隨著請求和響應在 Web 服務器和用戶端之間來回傳輸。Cookie 包含每次使用者訪問網站時可由 Web 應用程式讀取的資訊。
1. 寫Cookie
瀏覽器管理用戶端電腦上的 Cookie。使用 HttpResponse 對象可向用戶端發送 Cookie,該對象會公開稱為 Cookies 的屬性。任何需要 Web 應用程式發送到瀏覽器的 Cookie 都必須添加到此集合中。編寫新 Cookie 時,必須指定 Name 和 Value。每個 Cookie 必須有一個唯一的名稱,這樣在以後當瀏覽器隨同請求發送 Cookie 時,Web 應用程式就可以標識該 Cookie。
預設情況下,Cookie 由位於同一域中的所有頁面共用,但可以通過設定 Cookie 的 Path 屬性將 Cookie 限制在網站中的特定子檔案夾。若要允許應用程式的所有檔案夾中的所有頁面都檢索一個 Cookie,請從應用程式根資料夾中的版面設定該 Cookie,但不要設定 Path 屬性。
如果不指定該 Cookie 的到期限制,則該 Cookie 將不會保留在用戶端電腦上,當使用者會話到期時該 Cookie 即到期。
Cookie 僅能儲存 String 類型的值。在將任何非字串值儲存到 Cookie 中之前,必須將它們轉換為字串
HttpCookie myCookie = new HttpCookie("Cooker");myCookie["name"] = "zzh";myCookie["today"] = "friday";myCookie.Expires = DateTime.Now.AddDays(1);//myCookie.Expires.AddDays(1);Response.Cookies.Add(myCookie);//Response.AppendCookie(myCookie);myCookie.Domain = "abc.com"; //指定範圍abc.com和子網域名稱如a.abc.com可用myCookie.Path = "/admin"; //只能用於 admin 檔案夾或虛擬根目錄中的頁面
2. 讀Cookie
出於安全原因,您只能讀取屬於同一域的頁所設定的 Cookie。如果已設定 Cookie 的 Path 屬性,則只有該域路徑中的頁和子檔案夾能夠使用該 Cookie。
在讀取特定 Cookie 值時,請測試該 Cookie 是否存在以及它是否具有值,否則將發生異常。
Cookie 中的所有值都作為 String 類型儲存,因此若要將 Cookie 值作為其他資料類型使用,必須對值進行相應地轉換。
if (Request.Cookies["Cooker"] != null){ string Cooker; if (Request.Cookies["Cooker"]["name"] != null) { Cooker = Request.Cookies["Cooker"]["name"]; }}
3. 刪Cookie
不能直接刪除使用者電腦中的 Cookie。但是,可以通過將 Cookie 的到期日設定為過去的日期,讓使用者的瀏覽器來刪除 Cookie。當使用者下一次向設定該 Cookie 的域或路徑內的頁發出請求時,瀏覽器將確定該 Cookie 已到期並將其移除。
調用 Cookies 集合的 Remove 方法可從伺服器端的集合中移除 Cookie,使 Cookie 不會被發送至用戶端。但是,如果用戶端已存在 Cookie,則該方法無法從用戶端將其移除。
if (Request.Cookies["Cooker"] != null){ HttpCookie myCookie = new HttpCookie("Cooker"); myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie);}迴圈刪
HttpCookie aCookie;string cookieName;int limit = Request.Cookies.Count;for (int i=0; i<limit; i++){ cookieName = Request.Cookies[i].Name; aCookie = new HttpCookie(cookieName); aCookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(aCookie);}
4. 改Cookie
不能直接修改 Cookie。更改 Cookie 的過程涉及建立一個具有新值的新 Cookie,然後將其發送到瀏覽器來覆蓋用戶端上的舊版本 Cookie。下面的程式碼範例示範如何更改儲存使用者對網站的訪問次數的 Cookie 的值
int counter;if (Request.Cookies["counter"] == null) counter = 0;else{ counter = int.Parse(Request.Cookies["counter"].Value);}counter++;Response.Cookies["counter"].Value = counter.ToString();Response.Cookies["counter"].Expires = DateTime.Now.AddDays(1);
5. Cookie安全
不要將任何關鍵資訊儲存在 Cookie 中。例如,不要將使用者的密碼儲存在 Cookie 中,即使是暫時儲存也不要這樣做。通常,不要將任何資訊儲存在 Cookie 中,因為一旦它被假冒,就會危及您的應用程式的安全。而是在 Cookie 中儲存對資訊在伺服器上的位置的引用。
將 Cookie 的到期日期設定為可接受的最短實際時間。儘可能避免使用永久 Cookie。
考慮對 Cookie 中的資訊加密。
考慮將 Cookie 的 Secure 和 HttpOnly 屬性設定為 true。
Cookie.Secure=true 使 Cookie 只能在使用安全通訊端層 (SSL) 的串連上傳輸。SSL 並不能防止儲存在使用者電腦上的 Cookie 被讀取或操作,但可防止 Cookie 在傳輸過程中被讀取,因為 Cookie 已被加密。