Response對象和Request對象分別是包含HttpResponse和HttpRequest類實例的頁面的屬性
Request.cookie //將COOKIE發送給服務端
Response.cookie //將COOKIE保存在客戶機
概念:yourCookieObj:對象實例名
yourCookieName:對象名
一、創建COOKIE
1.1、創建Cookie對象
HttpCookie yourCookieObj= new HttpCookie("yourCookieName") ; //定義cookie對象與名稱
yourCookieObj.Expires = DateTime.Now.AddDays(1) ; //因爲要有Expires的設置,纔會存到客戶機的硬盤上
Response.Cookies.Add(yourCookieObj); //確定寫入客戶機cookie中
另一種方法:不需要建立對象實例(在簡單應用時更方便)
Response.Cookies["yourCookieName"].Expires = DateTime.Now.AddDays(1) ;
Response.Cookies.Add(Response.Cookies["yourCookieName"]);
因爲:“Response.Cookies["yourCookieName"]”其實就是一個只由對象名錶示(非實例化)的對象。
1.2、給整個對象賦值
1.2.1、yourCookieObj.Value = "Cookie對象內容";
1.2.2、Response.Cookies["yourCookieName"].Value = "Cookie對象內容";
1.2.3、也可以在創建對象時直接賦值
HttpCookie yourCookieObj= new HttpCookie("yourCookieName","Cookie對象內容") ;
1.3、給子鍵賦值
1.3.1、yourCookieObj.Values["yourCookieKey1"] = "Key內容1"; //增加第一個鍵
yourCookieObj.Values["yourCookieKey2"] = "Key內容2"; //增加第三個鍵
yourCookieObj["yourCookieKey3"] = "Key內容3"; //增加第三個鍵。.Values可以省略掉
1.3.2、Response.Cookies["yourCookieName"]["yourCookieKey1"]="Key內容1"
Response.Cookies["yourCookieName"]["yourCookieKey2"]="Key內容2"
二:有效時間
2.1、永久有效
yourCookieObj.Expires = DateTime.MaxValue;
或:yourCookieObj.Expires = DateTime.Now.AddYears(50) ;
2.2、定義具體過效時間
2.2.1、yourCookieObj.Expires = DateTime.Now.Add年/天/時/分/秒(值) ;
2.2.1、DateTime dt = DateTime.Now; //定義時間對象
TimeSpan ts=new TimeSpan(1,0,0,0); //定義時間間隔,查msdn (天,時,分,秒)
yourCookieObj.EXPires = dt.Add(ts); //添加作用時間(時間對象Add時間間隔)
2.3、如果沒有設置 Cookie 的有效期,它不會保存到用戶的硬盤上,
而是會成爲用戶會話信息的一部分。如果用戶關閉瀏覽器或會話超時,該 Cookie 就會被刪除。
三:域
3.1、yourCookieObj.Domain="域"
這個很重要,當你在“aaa.qy21.com”建立COOKIE時,在“bbb.qy21.com”是無效的。
如果我們在“aaa.qy21.com”設了yourCookieObj.Domain="qy21.com";
那麼這個Cookie對象在“bbb.qy21.com”(也包括qy21.com的所有子域)都有效了!
四:讀取
4.2、HttpCookie yourCookieObj=Request.Cookies["yourCookieName"];
//把客戶機名爲yourCookieName的Cookie對象賦給新建的對象實例
4.1、yourCookieObj.屬性 //屬性如:Value、Values、Domain等等,只有Expires讀不了
或:Request.Cookies["yourCookieName"].屬性 //屬性如:Value
4.2、讀取子建值
4.2.1、string str1 = Request.Cookies["yourCookieName"]["yourCookieKey1"]; //讀到的是:"Key內容1"
string str2 = Request.Cookies["yourCookieName"]["yourCookieKey2"]; //讀到的是:"Key內容2"
string str3 = Request.Cookies["yourCookieName"].Value;
// 讀到Cookie對象內容:"yourCookieKey1=內容1&yourCookieKey2=內容2"
4.2.2、也可以先獲取子鍵集合
System.Collections.Specialized.NameValueCollection
yourCookieKeyValues = Request.Cookies["yourCookieName"].Values;
string str1 = yourCookieKeyValues ["yourCookieKey1"];
string str2 = yourCookieKeyValues ["yourCookieKey2"];
五:刪除
5.1、刪除整個COOLIE對象
yourCookieObj.Expires = DateTime.MinValue //把時間設爲過期時間就可以了
或:yourCookieObj.Expires= DateTime.Now.AddDays(-1) ;
5.2、刪除某個子鍵
HttpCookie yourCookieObj= Request.Cookies["yourCookieName"];
yourCookieObj.Values.Remove("yourCookieKey1"); //要刪除的子鍵yourCookieKey1
yourCookieObj.Expires = DateTime.Now.AddDays(1) ;
Response.Cookies.Add(yourCookieObj); //確定寫入cookie中
六:修改與應用
6.1、
6.2、修改、追加、刪除子鍵(假設原來已經有3個子鍵)
HttpCookie yourCookieObj= Request.Cookies["yourCookieName"];
yourCookieObj["yourCookieKey1"] = "Key內容111"; //修改子鍵
yourCookieObj["yourCookieKey4"] = "Key內容4"; //添加子鍵
yourCookieObj.Values.Remove("yourCookieKey3"); //刪除子鍵
yourCookieObj.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(yourCookieObj);
其它:一、限制:
1.1、瀏覽器限制每個域只能放20個Cookie對象
1.2、一些瀏覽器限制所有域總共只能放300個Cookie對象
1.3、每個Cookie對象的value值的大小限制在4K:
經過IE測試:是限制在Cookie對象的Value字符串值爲5054字節
如果有“鍵(KEY)”時,連“鍵名”、“=”、“&”都算在5054個字節中。
也就是可以放5054個純英文或數字
但漢字可能亂碼,所以必須經過編碼,不同的編碼,佔字節是不一樣的:|
*.1、HttpUtility.UrlEncode編碼(由HttpUtility.UrlDecode解碼)
每個漢字編碼後是9個字節,所以實際上只能放561個漢字。
*.2、HttpUtility.UrlEncodeUnicode編碼(由HttpUtility.UrlDecode解碼)
每個漢字編碼後是6個字節,所以實際上只能放842個漢字。(推薦使用)
*.3、HttpUtility.HtmlEncode 在某些方式查看還會亂碼,不建議使用。
其它:二、漢字亂碼:
2.1、通過HttpUtility.UrlEncodeUnicode編碼,通過HttpUtility.UrlDecode解碼
如:寫:Response.Cookies["yourCookieName"].Value = HttpUtility.UrlEncodeUnicode("內容");
讀:HttpUtility.UrlDecode(Request.Cookies["yourCookieName"].Value)
其它:三、注意:
3.1、給COOKIE賦值時,應該給“=”、“&”進行語義轉化