天天看點

C#讀取設定Cookie

設定:

HttpCookie cookie = new HttpCookie("cookieName"); 
cookie.Value = "name1"
HttpContext.Current.Response.Cookies.Add(cookie);       

讀取:

HttpContext.Current.Request.Cookies["cookieName"].Value      

判斷cookie是否存在:

if(HttpContext.Current.Request.Cookies["cookieName"]==null){
//do something
}      

設定cookie有效期

cookie.Expires = DateTime.Now.AddDays(1);      

ASP.NET中Cookies的用法(轉)

一, cookies 寫入

方法1: 

Response.Cookies["username"].Value="gjy"; 

Response.Cookies["username"].Expires=DateTime.Now.AddDays(1); 

方法2: 

System.Web.HttpCookie newcookie=new HttpCookie("username"); 

newcookie.Value="gjy"; 

newcookie.Expires=DateTime.Now.AddDays(1); 

Response.AppendCookie(newcookie);

建立帶有子鍵的cookies: 

System.Web.HttpCookie newcookie=new HttpCookie("user"); 

newcookie.Values["username"]="gjy"; 

newcookie.Values["password"]="111"; 

newcookie.Expires=DateTime.Now.AddDays(1); 

Response.AppendCookie(newcookie);

或者

HttpCookie UserCookie = new HttpCookie("KindCode");

UserCookie["bigKind"] = lstBigKindCode.SelectedValue.Trim();

UserCookie["smallKind"] = lstSmallKindCode.SelectedValue.Trim();

UserCookie["UserName"] = strUserName;

UserCookie["userKind"] = lsbUserSmallKindCode.SelectedValue;

UserCookie.Expires = DateTime.Now.AddDays(1);//這裡設定要儲存多長時間.

Response.Cookies.Add(UserCookie);

二,cookies的讀取: 

無子鍵讀取: 

if(Request.Cookies["username"]!=null) 

Response.Write(Server.HtmlEncode(Request.Cookies["username"].Value)); 

有子鍵讀取: 

if(Request.Cookies["user"]!=null) 

Response.Write(Server.HtmlEncode(Request.Cookies["user"]["username"].Value));

}

或者

HttpCookie cookie = Request.Cookies["KindCode"];

if (cookie != null)

{

string bigKind = cookie.Values["bigKind"];

string userName = cookie.Values["UserName"];

}

三,cookies的清除

HttpCookie cookie = Request.Cookies["KindCode"];

if (cookie != null)

{

cookie.Expires = DateTime.Now.AddDays(-2);

Response.Cookies.Set(cookie);

}

四,Cookie應用小總結

一 寫入Cookie

  1. Name 和 Value 屬性由程式設定,預設值都是空引用。

  2. Domain屬性的預設值為目前URL的域名部分,不管發出這個cookie的頁面在哪個目錄下的。

  例如, http://www.kent.com/application1/login.aspx 頁面中發出一個cookie,Domain屬性預設就是www.kent.com ,可以由程式設定此屬性為需要的值。

  3. Path屬性的預設值是根目錄,即 ”/” ,不管發出這個cookie的頁面在哪個目錄下的。可以由程式設定為一定的路徑來進一步限制此cookie的作用範圍。

  4. Expires 屬性,這個屬性設定此Cookie 的過期日期和時間。如果沒有設定Cookie 的有效期(預設設定),也可以建立 Cookie,但它不會儲存到使用者的硬碟上,而是會成為使用者會話資訊的一部分,關閉浏覽器或會話逾時這個Cookie即會消失,這種Cookie稱作非永久性的 Cookie。存放SessionID的Cookie就是這樣的一種Cookie,它不存放在硬碟上,隻存在記憶體之中。

  5. 将要發出的Cookie附加到Response的Cookies屬性中就可以将此Cookie發送到用戶端:Reponse.Cookies.Add(Cookie)

  6. Domain屬性+Path屬性 相同的所有Cookie 在用戶端都存在一個檔案中,Cookie之間以”*”分割。每個Cookie的第一行是 Cookie 的名稱,第二行是值,第三行是Domain屬性+Path屬性組成的一個字元串,訓示此Cookie的作用域,其餘各行則包含 Cookie 的日常處理資訊,例如過期日期和時間。Cookie 中還有一個簡單的校驗和,如果更改 Cookie 名稱或值的長度,浏覽器就會檢測到修改并删除該 Cookie。

  二 讀取Cookie

  1. Request.Cookies 屬性中包含了用戶端發送到伺服器的所有Cookie的集合,隻有在請求URL的作用範圍内的Cookie才會被浏覽器連同Http請求一起發送到伺服器。

  2. Name 和 Value 屬性和子鍵的值很容易讀到。

  3. Domain 和 Path 屬性 是讀不到的,讀Domain屬性永遠是””,讀Path屬性永遠是 ”/” 。本來這些屬性的用途很有限。如果您的頁面與 Cookie 不在相同的域,您根本就不會在頁面的位置接收到該 Cookie。

  4. 也無法讀取Cookie 的過期日期和時間。事實上,當浏覽器向伺服器發送Cookie 資訊時,浏覽器并未将過期資訊包括在内。您可以讀取 Expires 屬性,但總是傳回為零的日期/時間值。Expires 屬性的主要作用是幫助浏覽器執行有關 Cookie 儲存的日常管理。從伺服器的角度來看,Cookie 要麼存在要麼不存在,是以對伺服器而言,有效期并不是有用的資訊。是以,浏覽器在發送 Cookie 時并不提供此資訊。如果您需要 Cookie 的過期日期,就必須重新設定。

  三 修改和删除 Cookie

  1. 其實你不能直接修改一個Cookie,是建立一個同名的 Cookie,并把該 Cookie發送到浏覽器,覆寫客戶機上舊的 Cookie。

  2. 同樣您無法直接将其删除一個Cookie,可以通過修改一個Cookie達到讓浏覽器幫你删除Cookie的目的,修改Cookie的有效期為過去的某個時間,當浏覽器檢查Cookie 的有效期時,就會删除這個已過期的 Cookie。

  四 Cookie同Session的關系

  1. asp.net中Session可以采用cookie 和cookieless兩種方法,cookieless方式是将SessionID放在URL中在用戶端和服務端中來回傳遞,不需要用到cookie,在這裡不讨論這個方式。

  2. 在asp.net中客戶第一次請求一個URL,伺服器給這個客戶生成一個SessionID,并以非永久性的 Cookie發送到用戶端。

  3. 非永久性的 Cookie隻有在浏覽器關閉後這些Cookie才随之消失,Session的逾時判斷是這樣的過程:

  3.1 第一次用戶端通路伺服器,會得到一個SessionID,以非永久性的 Cookie發送到用戶端。

  3.2 在這個浏覽器關閉之前通路這個URL,浏覽器都會把這個SessionID發送到服務端,服務端根據SessionID來維持對應此客戶的服務端的各種狀态(就是Session中儲存的各種值),在web應用程式中可以對這些Session進行操作。

  3.3 服務端維護此SessionID的過期時間,IIS中可以設定Session的逾時時間。每次請求都将導緻服務端将此SessioID的過期時間延長一個設定的逾時時間。

  3.4 當服務端發現某個SessionID已經過時,即某個客戶已經在設定的逾時時間内沒有再次通路此站點,即将此SessionID,連同跟此SessionID相關的所有Session變量删除。

  3.5 用戶端的浏覽器未關閉前,并不知道服務端已經将這個SessionID删除,用戶端依舊發送此SessionID的cookie到服務端,隻是此時的服務端已經不認識此SessionID了,會将此使用者當做新使用者,再次配置設定一個新的SessionID。