<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Cookies的各方面知識(基礎/高級)深度了解

        來源:懂視網 責編:小采 時間:2020-11-27 22:41:52
        文檔

        Cookies的各方面知識(基礎/高級)深度了解

        Cookies的各方面知識(基礎/高級)深度了解:一,前言 Cookies想必所有人都了解, 但是未必所有人都精通。本文講解了Cookies的各方面知識。 二,基礎知識 1.什么是Cookies Cookie 是一小段文本信息,伴隨著用戶請求和頁面在 Web 服務器和瀏覽器之間傳遞。Cookie 包含每次用戶訪問站點時 Web 應
        推薦度:
        導讀Cookies的各方面知識(基礎/高級)深度了解:一,前言 Cookies想必所有人都了解, 但是未必所有人都精通。本文講解了Cookies的各方面知識。 二,基礎知識 1.什么是Cookies Cookie 是一小段文本信息,伴隨著用戶請求和頁面在 Web 服務器和瀏覽器之間傳遞。Cookie 包含每次用戶訪問站點時 Web 應

        一,前言

        Cookies想必所有人都了解, 但是未必所有人都精通。本文講解了Cookies的各方面知識。

        二,基礎知識

        1.什么是Cookies

        Cookie 是一小段文本信息,伴隨著用戶請求和頁面在 Web 服務器和瀏覽器之間傳遞。Cookie 包含每次用戶訪問站點時 Web 應用程序都可以讀取的信息。

        例如,如果在用戶請求站點中的頁面時應用程序發送給該用戶的不僅僅是一個頁面,還有一個包含日期和時間的 Cookie,用戶的瀏覽器在獲得頁面的同時還獲得了該 Cookie,并將它存儲在用戶硬盤上的某個文件夾中。

        以后,如果該用戶再次請求您站點中的頁面,當該用戶輸入 URL 時,瀏覽器便會在本地硬盤上查找與該 URL 關聯的 Cookie。如果該 Cookie 存在,瀏覽器便將該 Cookie 與頁請求一起發送到您的站點。然后,應用程序便可以確定該用戶上次訪問站點的日期和時間。您可以使用這些信息向用戶顯示一條消息,也可以檢查到期日期。

        Cookie 與網站關聯,而不是與特定的頁面關聯。因此,無論用戶請求站點中的哪一個頁面,瀏覽器和服務器都將交換 Cookie 信息。用戶訪問不同站點時,各個站點都可能會向用戶的瀏覽器發送一個 Cookie;瀏覽器會分別存儲所有 Cookie。

        Cookie 幫助網站存儲有關訪問者的信息。一般來說,Cookie 是一種保持 Web 應用程序連續性(即執行狀態管理)的方法。除短暫的實際交換信息的時間外,瀏覽器和 Web 服務器間都是斷開連接的。對于用戶向 Web 服務器發出的每個請求,Web 服務器都會單獨處理。但是在很多情況下,Web 服務器在用戶請求頁時識別出用戶會十分有用。例如,購物站點上的 Web 服務器跟蹤每位購物者,這樣站點就可以管理購物車和其他的用戶特定信息。因此,Cookie 可以作為一種名片,提供相關的標識信息幫助應用程序確定如何繼續執行。

        使用 Cookie 能夠達到多種目的,所有這些目的都是為了幫助網站記住用戶。例如,一個實施民意測驗的站點可以簡單地將 Cookie 作為一個 Boolean 值,用它來指示用戶的瀏覽器是否已參與了投票,這樣用戶便無法進行第二次投票。要求用戶登錄的站點則可以通過 Cookie 來記錄用戶已經登錄,這樣用戶就不必每次都輸入憑據。

        2.Cookies如何存儲

        Cookies保存在用戶的本地機器上,不同的瀏覽器存儲在不同的文件夾中,并且按照域名分別保存。即網站之間的Cookies不會彼此覆蓋。

        IE瀏覽器的用戶可以通過在本地的文檔中找到Cookies的txt文件, 不同操作系統的位置不同,windows server 2003/xp都保存在:

        C:\Documents and Settings\Administrator\Cookies 文件夾下。

        其中名稱txt按照域名保存,比如localhost域下的cookies為:

        administrator@localhost[1].txt 或者 administrator@localhost[2].txt

        其中后面的[1]和[2]是隨著每次保存交替變化的。

        3.Cookies如何傳遞

        Cookies的信息是在Web服務器和瀏覽器之間傳遞的。保存在Http請求中。

        (1)請求頁面

        在請求一個頁面的Http頭中,會將屬于此頁面的本地Cookies信息加在Http頭中,注意下面加粗的部分:
        代碼如下:
        GET /Cookies/Test.aspx HTTP/1.1
        Host: localhost:1335
        User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 GTB5 (.NET CLR 3.5.30729)
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Language: zh-cn,zh;q=0.5
        Accept-Encoding: gzip,deflate
        Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
        Keep-Alive: 300
        Connection: keep-alive
        Cookie: My.Common.TestCookieInfo=Pkid=999&TestValue=aaabbbcccdddeee

        (2)頁面響應

        如果頁面要求寫入Cookies信息,則返回的Http如下,注意加粗的部分:
        代碼如下:
        HTTP/1.x 200 OK
        Server: ASP.NET Development Server/9.0.0.0
        Date: Thu, 06 Aug 2009 03:40:59 GMT
        X-AspNet-Version: 2.0.50727
        Set-Cookie: My.Common.TestCookieInfo=Pkid=999&TestValue=aaabbbcccdddeee; expires=Fri, 07-Aug-2009 03:40:59 GMT; path=/
        Cache-Control: private
        Content-Type: text/html; charset=utf-8
        Content-Length: 558
        Connection: Close

        4.Cookies如何查看

        (1)查看Cookies的txt文件

        IE用戶可以直接查看Cookies的txt文件。
        比如:C:\Documents and Settings\Administrator\Cookies\administrator@localhost[1].txt

        (2)使用插件

        FF下使用Web Developer插件可以很方便的查看、刪除和修改Cookies:

        插件截圖:

        image 

        查看頁面Cookies:

        image

        三. Cookies高級知識

        1.Cookie 的限制

        大多數瀏覽器支持最大為 4096 字節的 Cookie。

        瀏覽器還限制站點可以在用戶計算機上存儲的 Cookie 的數量。大多數瀏覽器只允許每個站點存儲 20 個 Cookie;注意這里的20個是指主鍵值,也就是20條Cookies記錄,但是每個Cookies記錄還可以包含若干子鍵,下面會詳細解釋。如果試圖存儲更多 Cookie,則最舊的 Cookie 便會被丟棄。有些瀏覽器還會對它們將接受的來自所有站點的 Cookie 總數作出絕對限制,通常為 300 個。

        2.Cookies的存儲格式

        Cookies可以包含一個主鍵, 主鍵再包含子鍵。比如asp.net中獲取Cookies的格式是:
        代碼如下:
        Request.Cookies[key][subkey].ToString();

        其中的key就是主鍵,subkey就是主鍵關聯的子鍵。

        (1)本地磁盤存儲格式:
        代碼如下:
        My.Common.TestCookieInfo
        Pkid=999&TestValue=aaabbbcccdddeee
        localhost/
        1536
        3059603968
        30021392
        2348960464
        30021191
        *

        其中的Pkid=999&TestValue=aaabbbcccdddeee 是Cookies的值,由于使用了subkey=subvalue的格式, 所以此Cookies是包含子鍵的。

        (2)Javascript中的Cookie格式

        在Javascript中給的Cookie是一個字符串,通過document.cookies獲取。字符格式如下:

        My.Common.SubKey=Pkid=999&TestValue=aaabbbcccdddeee; SingleKey=SingleKeyValue

        上面的字符串包含了兩個Cookies,一個是不包含子鍵的SingleKey, 一個是包含pkid和TextValue兩個子鍵的My.Common.SubKey,兩個Cookie通過“;”分割。

        (3)Asp.Net中的Cookies格式

        和所有的服務器端語言一樣,Asp.Net中使用集合類保存Cookies集合:
        代碼如下:
        public sealed class HttpCookieCollection : NameObjectCollectionBase
        {...}

        通過HttpResquest和HttpResponse對象的Cookies屬性,可以獲取和寫入當前頁面的Cookies。

        3.Cookies的內容編碼格式

        Cookies的值中可以保存除了“;”以外的標點符號。但是不能保存漢字。保存漢字會出現亂碼。

        所以對于Cookies中的內容要進行統一的編碼和解碼。為了在瀏覽器端和服務器端都能夠進行解碼和編碼, 所以要統一使用UTF編碼格式。

        主要是因為javascript中只能使用UTF編碼格式。

        4.Cookies的Path屬性

        Cookies的Path屬性表示當前的Cookies可以作用在網站的那個路徑下。

        比如下面的兩個同名的Cookies:

        image

        允許存在兩個同名但是Path不同的Cookies。

        無論是服務器端還是客戶端,在獲取時優先獲取本頁路徑下面的Cookies。

        也就是說如果在、/chapter10/路徑下面的頁面, 獲取testKey這個Cookies的值,則只能獲取到testValue222222這個值。

        5.Cookies的過期時間

        如果保存Cookies時未設置過期時間, 則Cookies的過期時間為“當前瀏覽器進程有效”,即和Session一樣關閉瀏覽器后則消失。在asp.net中還可以通過設置HttpCookie對象的過期時間為DateTime.MinValue來指定此Cookies為跟隨瀏覽器生效。(這句話來之不易啊,在腦袋等人的幫助下才查到的。)

        如果設置了過期時間并且大于當前時間,則會保存Cookies值。

        如果設置了過期時間但是小于等于當前時間,則清除Cookies值。

        6.Cookies與Session

        有時我們會忽略Cookies與Session的關系。但是兩者是密不可分的。

        Session的唯一標示:SessionID是通常保存在Cookies中的(也可以保存在URL中)。對于Asp.Net而言,SessionID保存在鍵值為“ASP.NET_SessionId”的Cookies中,如圖:

        image

        因為Cookies的存儲數量是有限制的,所以我們的系統在保存Cookies的時候一定要注意防止沖掉這一個關鍵的Cookies。在下文介紹的最佳實踐-以強對象方式保存Cookies的代碼中特意對這個Cookies做了處理。

        7.Cookies加密

        在設置Cookies的屬性時,有一個選項Secure用來控制Cookie的加密特性。

        如果通過 SSL 連接 (HTTPS) 傳輸 Cookie,則為 true;否則為 false。默認為 false。

        如果我們保存一個Cookies并設置加密,那么在非HTTPS的頁面中,無論是使用javascript還是服務器端都無法獲得此Cookies。但是在本地依然可以看到此Cookies的存在。

        8.Cookies與Ajax

        如果Ajax請求訪問一個服務器頁面,此服務器頁面是可以向用戶瀏覽器寫入Cookies和Session的。

        四. Cookies最佳實踐

        在了解了Cookies的相關知識后,下面提出最佳的事件方法。其中包括客戶端和服務器端兩部分。

        (1)Asp.Net 中保存Cookies

        通常,我們使用Request和Response對象來直接操作Cookies:

        寫入Cookies:
        代碼如下:
        Response.Cookies["k1"].Value = "k1Value";
        Response.Cookies["k2"]["k2-1"] = "k2-1Value";
        Response.Cookies.Add(new HttpCookie("k3", "k3Value"));

        讀取Cookies:
        代碼如下:
        Request["k1"] ;
        Request.Cookies["k1"].Value ;
        Request.Cookies["k2"]["k2-1"];
        Request.Cookies.Get(0).Value;

        注意Request["k1"]這個大家熟悉的獲取get和post參數的方法,同時還能夠獲取Cookies的值!

        另外上面語句中的有些是必須通過Value屬性訪問的,有些則不需要。

        (2)以對象方式保存Cookies

        下面提供一個可以以對象方式整體保存Cookies的工具類。并且只占用一條Cookies,所有的屬性都存在子鍵上。

        源代碼:
        代碼如下:
        /// <summary>
        /// Cookies基類。將需要保存Cookies的數據類此類派生,可以將強類型對象在Cookies中的保存和讀取。
        /// </summary>
        /// <remarks>
        /// 2009.8.6 ziqiu.zhang created
        /// </remarks>
        /// <example>
        /// 假設MyCookiesInfo是從 從Cookies中獲取對象:
        /// <code>
        /// CookieInfo item = new CookieInfo(); //new以后已經從Cookies中構造了對象。
        /// </code>
        /// 將對象保存在Cookies中:
        /// <code>
        /// CookieInfo item = new CookieInfo();
        /// item.value = "test value";
        /// item.SetCookies("1"); //Cookies有效期為1天
        /// </code>
        /// </example>
        [System.Serializable]
        public class CookieInfo
        {
        #region ==================== Constructed Method ====================
        /// <summary>
        /// 構造函數
        /// </summary>
        public CookieInfo()
        {
        }
        #endregion
        #region ==================== Public Method ====================
        /// <summary>
        /// 得到當前Cookies的過期時間
        /// </summary>
        /// <returns>過期時間</returns>
        public DateTime GetExpiresTime()
        {
        string cookieName = GetType().ToString();
        if (HttpContext.Current.Request.Cookies[cookieName] != null)
        {
        return HttpContext.Current.Request.Cookies[cookieName].Expires;
        }
        return DateTime.MinValue;
        }
        /// <summary>
        /// 保存Cookies,過期時間為瀏覽器關閉則失效。
        /// </summary>
        /// <param name="expiresTime">Cookies過期事件</param>
        /// <returns>是否保存成功</returns>
        public bool Save()
        {
        return this.Save(DateTime.MinValue);
        }
        /// <summary>
        /// 保存Cookies,需要指定過期時間。
        /// </summary>
        /// <param name="expiresTime">Cookies過期事件</param>
        /// <returns>是否保存成功</returns>
        public bool Save(DateTime expiresTime)
        {
        string CookieName = GetType().ToString();
        HttpCookie SessionCookie = null;
        //對 SessionId 進行備份.
        if (HttpContext.Current.Request.Cookies["ASP.NET_SessionId"] != null)
        {
        string SesssionId = HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value.ToString();
        SessionCookie = new HttpCookie("ASP.NET_SessionId");
        SessionCookie.Value = SesssionId;
        }
        //設定cookie 過期時間.
        DateTime dtExpiry = expiresTime;
        HttpContext.Current.Response.Cookies[CookieName].Expires = dtExpiry;
        //設定cookie 域名.
        string domain = string.Empty;
        if (HttpContext.Current.Request.Params["HTTP_HOST"] != null)
        {
        //domain = "www.elong.com";
        domain = HttpContext.Current.Request.Params["HTTP_HOST"].ToString();
        }
        //如果是www.elong.com或多級域名,需要轉化為elong.com
        if (domain.IndexOf(".") > -1)
        {
        string[] temp = domain.Split('.');
        if (temp.Length >= 3)
        {
        domain = temp[temp.Length - 2].Trim() + "." + temp[temp.Length - 1].Trim();
        }
        HttpContext.Current.Response.Cookies[CookieName].Domain = domain;
        }
        //把類的屬性, 寫入Cookie.
        PropertyInfo[] Propertys = GetType().GetProperties();
        foreach (PropertyInfo pi in Propertys)
        {
        object oj = pi.GetValue(this, null);
        Type type = pi.PropertyType;
        string valueStr = string.Empty;
        if (oj != null && oj.ToString() != string.Empty)
        {
        if (type == Type.GetType("System.DateTime"))
        {
        valueStr = ((DateTime)oj).ToString("yyyy/MM/dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo);
        }
        else
        {
        valueStr = oj.ToString();
        }
        HttpContext.Current.Response.Cookies[CookieName][pi.Name] = HttpUtility.UrlEncode(valueStr);
        }
        }
        //如果cookie總數超過20 個, 重寫ASP.NET_SessionId, 以防Session 丟失.
        if (HttpContext.Current.Request.Cookies.Count > 20 && SessionCookie != null)
        {
        if (SessionCookie.Value != string.Empty)
        {
        HttpContext.Current.Response.Cookies.Remove("ASP.NET_SessionId");
        HttpContext.Current.Response.Cookies.Add(SessionCookie);
        }
        }
        return true;
        }
        /// <summary>
        /// 找回Cookie值
        /// </summary>
        public void Load()
        {
        string cookieValue = string.Empty;
        string CookieName = GetType().ToString();
        //通過遍歷屬性, 從cookie 中找回值, 回寫到屬性.
        PropertyInfo[] Propertys = GetType().GetProperties();
        foreach (PropertyInfo pi in Propertys)
        {
        try
        {
        cookieValue = HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[CookieName][pi.Name].ToString());
        }
        catch
        {
        cookieValue = string.Empty;
        }
        if (pi.CanWrite && cookieValue != null && cookieValue != string.Empty)
        {
        try
        {
        object obb = cookieValue;
        Type type = pi.PropertyType;
        obb = Convert.ChangeType(obb, type);
        pi.SetValue(this, obb, null);
        }
        catch { }
        }
        }
        }
        #endregion
        }


        使用

        首先說明如何使用此類。

        為想要保存在Cookies中的類建立模型,并且繼承自CookieInfo即可。比如下面建立了MyCookieInfo類,其中包含屬性pkid,TestValue和TestDateTime:
        代碼如下:
        /// <summary>
        /// 保存Cookies的數據對象
        /// </summary>
        [System.Serializable]
        public class MyCookieInfo : CookieInfo
        {
        private int m_Pkid = 0;
        public int Pkid
        {
        get
        {
        return m_Pkid ;
        }
        set
        {
        m_Pkid = value ;
        }
        }

        private string m_TestValue = "";
        public string TestValue
        {
        get
        {
        return m_TestValue;
        }
        set
        {
        m_TestValue = value;
        }
        }

        private DateTime m_TestDateTime = DateTime.Now;
        public DateTime TestDateTime
        {
        get
        {
        return m_TestDateTime;
        }
        set
        {
        m_TestDateTime = value;
        }
        }
        }

        接下來就可以使用對象的Save和Load方法保存和讀取Cookies:
        代碼如下:
        •保存
        Save方法有兩個重載,不帶參數的Save方法表示Cookies的過期時間與瀏覽器相同,即瀏覽器關閉則Cookies消失。否則需要傳入Cookies過期時間。
        MyCookieInfo testCookies = new MyCookieInfo();
        testCookies.Pkid = 1;
        testCookies.TestValue = "中文測試";
        testCookies.Save(); •讀取

        MyCookieInfo testCookies = new MyCookieInfo();
        testCookies.Load();
        this.lblMsg.Text = "Pkid:" + testCookies.Pkid.ToString();
        this.lblMsg.Text += ",TestValue:" + testCookies.TestValue.ToString();
        this.lblMsg.Text += ",TestDateTime:" + testCookies.TestDateTime.ToString("yyyy/MM/dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo);

        現在我們已經可以將一個強類型的對象讀取和保存Cookies了。
        (3)使用Javascript操作Cookies

        在客戶端我們同樣需要操作Cookies。

        下面是封裝了的專門用于操作Cookies的jQuery工具函數。
        當然此工具函數稍加修改,就可以變成標準的Javascript函數。

        下載地址

        工具函數說明:

        方法簽名: jQuery.cookie(name, subName, value,  options)

        方法說明:讀取、寫入、刪除Cookies

        方法參數:

        名稱 說明 舉例
        name cookies的主鍵值 讀取主鍵:
        $.cookie("singleKey")

        寫入cookies,值為字符串:
        $.cookie("singleKey", "", "singleKey-value", { expires: 1, path: "/", secure: false })

        subName 子鍵名稱。在寫入時請傳遞空或者null 讀取子鍵:
        $.cookie("multiKey", "subName1")

        寫入cookies,值為對象:
        var subNameObj = { subName1: "aaa", subName2: "bbb", subName3: "ccc" };$.cookie("multiKey", "", subNameObj, { expires: 1, path: "/", secure: false });

        value Cookies值,可以是字符串或者對象。
        如果是對象,則將對象的每個屬性保存在Cookies子鍵。
        參見上面實例。
        options 參數:
        expires:可以是數字或者Data類型的對象。
        如果傳入數字表示幾天后過期。
        path:路徑,默認為域名根目錄(“/”)。
        secure:是否啟用加密,默認為否。

        指定過期時間:

        var myDate = new Date();myDate.setFullYear(2009, 10, 10);$.cookie("singleKey", "", "singleKey-value", { expires: myDate, secure: false })  

        1天后過期:

        var time = Date();$.cookie("singleKey", "", "singleKey-value", { expires: 1, path: "/", secure: false })

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Cookies的各方面知識(基礎/高級)深度了解

        Cookies的各方面知識(基礎/高級)深度了解:一,前言 Cookies想必所有人都了解, 但是未必所有人都精通。本文講解了Cookies的各方面知識。 二,基礎知識 1.什么是Cookies Cookie 是一小段文本信息,伴隨著用戶請求和頁面在 Web 服務器和瀏覽器之間傳遞。Cookie 包含每次用戶訪問站點時 Web 應
        推薦度:
        標簽: 了解 高級 基礎
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲图片在线观看| 亚洲国产婷婷综合在线精品| 国产av无码专区亚洲av果冻传媒| 亚洲天堂免费在线| 青娱分类视频精品免费2| 亚洲资源在线观看| 在线永久看片免费的视频| 亚洲精品中文字幕乱码影院| 国产大片免费网站不卡美女| 亚洲国产高清在线精品一区| 丁香花免费高清视频完整版| 亚洲乱码无人区卡1卡2卡3| 午夜视频在线观看免费完整版| 亚洲沟沟美女亚洲沟沟| 成人影片麻豆国产影片免费观看| 亚洲人成色777777精品| 国产免费资源高清小视频在线观看| 国产成人高清亚洲一区久久| 亚洲精品人成无码中文毛片 | 99久久精品免费精品国产| 亚洲精品高清国产一久久| 四虎免费影院ww4164h| 亚洲国产av玩弄放荡人妇 | 久久久久亚洲AV无码专区网站| 久青草国产免费观看| 亚洲成人免费在线| 67194成是人免费无码| 瑟瑟网站免费网站入口| 亚洲日韩欧洲乱码AV夜夜摸 | a级精品九九九大片免费看| 亚洲视频一区网站| 国产免费观看黄AV片| 香蕉免费一区二区三区| 亚洲成av人无码亚洲成av人| 久久夜色精品国产亚洲av| 日本三级2019在线观看免费| 青青视频免费在线| 久久亚洲国产精品成人AV秋霞| 免费观看午夜在线欧差毛片| 性xxxxx大片免费视频| 精品成人一区二区三区免费视频|