COOKIE用法

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賦值時,應該給“=”、“&”進行語義轉化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章