成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

20170618-cookie

NotFound / 1608人閱讀

摘要:盡管瀏覽器對(duì)進(jìn)行了大小限制,不過(guò)最好還是盡可能在中少存儲(chǔ)信息,以避免影響性能。的性質(zhì)和局限性使其并不能作為存儲(chǔ)大量信息的理想手段。

Cookie

HTTP Cookie, 通常直接叫做cookie,最初是在客戶端用于存儲(chǔ)會(huì)話信息的。該標(biāo)準(zhǔn)要求服務(wù)器對(duì)任意HTTP請(qǐng)求發(fā)送Set-Cookie HTTP頭作為響應(yīng)的一部分,其中包含會(huì)話信息。這個(gè)HTTP響應(yīng)設(shè)置一個(gè)以name為名稱(chēng)、以value為值的cookie,名稱(chēng)和值在傳送時(shí)都必須是URI編碼的。瀏覽器會(huì)存儲(chǔ)這樣的會(huì)話信息,并在這之后,通過(guò)為每個(gè)請(qǐng)求添加Cookie HTTP頭將信息發(fā)送回服務(wù)器,發(fā)送回服務(wù)器的額外信息可以用于唯一驗(yàn)證客戶端來(lái)自于發(fā)送的哪個(gè)請(qǐng)求。

Cookie的限制 安全性限制

cookie在性質(zhì)上是綁定在特定的域名下的。當(dāng)設(shè)定了一個(gè)cookie后,再給創(chuàng)建它的域名發(fā)送請(qǐng)求時(shí),都會(huì)包含這個(gè)cookie。這個(gè)限制確保了存儲(chǔ)在cookie中的信息只能讓批準(zhǔn)的接受者訪問(wèn),而無(wú)法被其他域訪問(wèn)。

數(shù)量限制

IE6及更低的版本每個(gè)域名限制為20個(gè)cookie,IE7及以后的版本每個(gè)域名限制為50個(gè)cookie。

Firefox每個(gè)域名cookie限制為50個(gè)。

Opera每個(gè)域名cookie限制為30個(gè)。

Safari和Chrome對(duì)每個(gè)域的cookie的數(shù)量限制沒(méi)有硬性規(guī)定

大小限制

大多數(shù)瀏覽器對(duì)每個(gè)cookie有大約4096B的長(zhǎng)度限制(大約4K)

cookie的構(gòu)成

cookie由瀏覽器保存的以下幾塊信息構(gòu)成

名稱(chēng)

域:cookie對(duì)哪個(gè)域是有效的,所有向該域發(fā)送的請(qǐng)求中都會(huì)包含這個(gè)cookie信息,默認(rèn)值為設(shè)置cookie的那個(gè)域

路徑:指定域中的哪個(gè)路徑,應(yīng)該向服務(wù)器發(fā)送cookie。例如指定該值為http://www.example.com/test1/,則只有該路徑下的請(qǐng)求會(huì)包含這個(gè)cookie

失效時(shí)間: cookie何時(shí)應(yīng)該被刪除的時(shí)間戳

安全標(biāo)志: 指定后,cookie只有在使用SSL連接時(shí),才會(huì)發(fā)送到服務(wù)器

尤其要注意,域、路徑、失效時(shí)間、安全標(biāo)志都是服務(wù)器給瀏覽器的標(biāo)識(shí),這些參數(shù)并不會(huì)作為發(fā)送到服務(wù)器的cookie信息的一部分,只有鍵值對(duì)才會(huì)被發(fā)送。

JavaScript對(duì)cookie的操作

使用document.cookie可以獲取當(dāng)前頁(yè)面可用的所有的cookie組成的字符串,該字符串是有分號(hào)隔開(kāi)的鍵值對(duì)構(gòu)成(由分號(hào)隔開(kāi)的一個(gè)鍵值對(duì)就是一個(gè)cookie),例如:name1=value1;name2=value2;name3=value3。所有名字和值都是經(jīng)過(guò)URL編碼,所以必須使用decodeURIComponent()來(lái)解碼。

當(dāng)document.cookie用于設(shè)置值的時(shí)候,document.cookie屬性可以設(shè)置為一個(gè)新的字符串,這個(gè)cookie字符串會(huì)被解釋并添加到現(xiàn)有的cookie集合中。設(shè)置document.cookie并不會(huì)覆蓋cookie,除非設(shè)置的cookie的名稱(chēng)已經(jīng)存在

var CookieUtil = {
    get: function(name){
        var cookieName = encodeURIComponent(name) + "=",
            cookieStart = document.cookie.indexOf(cookieName),
            cookieValue = null;
        if(cookieStart > -1){
            cookieEnd = document.cookie.indexOf(";", cookieStart);
            if(cookieEnd == -1){
                cookieEnd = document.cookie.length;
            }
            cookieValue = decodeURIComponent(document.cookie.substring(cookieStart+cookieName.length, cookieEnd));
        }
        return cookieValue;
    },
    
    set: function(name, value, expires, path, domain, secure){
        // 設(shè)置的cookie的名稱(chēng)已存在,將會(huì)覆蓋原有的cookie
        var cookieText = encodeURIComponent(name) + "=" + encodeURIComponent(value);
        if(expires instanceof Date){
            cookieText += "; expires=" + expires.toGMTString();
        }
        if(path){
            cookieText += "; path=" + path;
        }
        if(domain){
            cookieText += "; domain=" + domain;
        }
        if(secure){
            cookieText += "; secure=" + secure;
        }
        document.cookie = cookieText;
    },
    // 刪除已有cookie
    unset: function(name, path, domain, secure){
        this.set(name, "", new Date(), path, domain, secure);
    }
}
子cookie

為了繞開(kāi)瀏覽器的單域名下的cookie數(shù)量限制,可以在每個(gè)cookie中存放多個(gè)更小的字段(子cookie)。子cookie最常見(jiàn)的格式如下:

"name=name1=value1&name2=value2&name3=value3"

子cookie一般也以查詢字符串的格式進(jìn)行格式化。然后這些值可以使用單個(gè)cookie進(jìn)行存儲(chǔ)和訪問(wèn),而非對(duì)每個(gè)鍵值對(duì)使用不同的cookie存儲(chǔ)。最后網(wǎng)站或web應(yīng)用程序可以無(wú)需達(dá)到單域名cookie上限也可以存儲(chǔ)更加結(jié)構(gòu)化的數(shù)據(jù)。為了更好地操作子cookie,必須建立一系列新方法。子cookie的解析和序列化會(huì)因子cookie的期望用途而略有不同并更加復(fù)雜些。

var SubCookieUtil = {
    get: function(name, subName){
        var subCookies = this.getAll(name)
        if(subCookies){
            return subCookies[subName];
        } else {
            return null;
        }
    },
    
    getAll: function(name){
        var cookieName = encodeURIComponent(name) + "=",
            cookieStart = document.cookie.indexOf(cookieName),
            cookieValue = null,
            cookieEnd,
            subCookie,
            i,
            parts,
            result = {};
        
        if(cookeStart > -1){
            cookieEnd = document.cookie.indexOf(";", cookieStart);
            if(cookieEnd == -1){
                cookieEnd = document.cookie.length;
            }
            cookieValue = document.cookie.substring(cookieStart+cookieName.length, cookieEnd);
            if(cookieValue.length>0){
                subCookies = cookieValue.split("&");
                
                for(i=0, len=subCookies.length; i0){
            cookieText += subcookieParts.join("&");
            if(expires instanceof Date){
                cookieText += "; expires=" + expires.toGMTSting();
            }
            if(path){
                cookieText += "; path=" + path;
            }
            if(domain){
                cookieText += "; domain=" + domain;
            }
            if(secure){
                cookieText += "; secure=" + secure;
            }
        } else {
            cookieText += "; expires="+(newDate(0)).toGMTString();
        }
        document.cookie = cookieText;
    },
    
    unset: function(name, subName, path, domain, secure){
        var subcookies = this.getAll(name);
        if(subcookies){
            delete subcookies[subName];
            this.set(name, subcookies, null, path, domain, secure);
        }
    },
    
    unsetAll: function(name, path, domain, secure){
        this.setAll(name, null, new Date(0), path, domain, secure);
    }
};
關(guān)于cookie的思考

操作cookie的時(shí)候需要密切關(guān)注cookie的長(zhǎng)度,以防超過(guò)單個(gè)cookie的長(zhǎng)度限制

所有的cookie都會(huì)由瀏覽器作為請(qǐng)求內(nèi)容的一部分發(fā)送,所以在cookie中存儲(chǔ)大量信息會(huì)影響到特定域的請(qǐng)求性能。cookie越大,完成對(duì)服務(wù)器請(qǐng)求的時(shí)間就越長(zhǎng)。盡管瀏覽器對(duì)cookie進(jìn)行了大小限制,不過(guò)最好還是盡可能在cookie中少存儲(chǔ)信息,以避免影響性能。

cookie的性質(zhì)和局限性使其并不能作為存儲(chǔ)大量信息的理想手段。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83556.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<