沒時間可只讀下面一句話,深入理解請閱讀全文。
總之,在進行頁面cookie操作的時候,應(yīng)該盡量保證每個域cookie個數(shù)小于50個,單條cookie總長度4KB(包闊鍵和值以及等號)
Cookie的長度限制分這么幾個方面來總結(jié)。
(1) 瀏覽器所允許的每個域下的最大cookie數(shù)目,沒有去自己測試,從網(wǎng)上找到的資料大概是這么個情況
| 瀏覽器 | 允許cookie條數(shù) |
|---|---|
| IE | 原先為20個,后來升級為50個 |
| Firefox | 50個 |
| Opera | 30個 |
| Chrome | 150個 |
| Safari | 無限制 |
chrome的150是親自測試成功的,剛好150條。
當(dāng)Cookie數(shù)超過限制數(shù)時瀏覽器的行為:IE和Opera會采用LRU算法將老的不常使用的Cookie清除掉,F(xiàn)irefox的行為是隨機踢出某些Cookie的值。當(dāng)然無論怎樣的策略,還是盡量不要讓Cookie數(shù)目超過瀏覽器所允許的范圍。
瀏覽器所允許的每個Cookie的最大長度
Firefox和Safari:4079字節(jié)
Opera:4096字節(jié)
IE:4095字節(jié)
(3) 服務(wù)器中Http請求頭長度的限制。Cookie會被附在每次http請求頭中傳遞給服務(wù)器,因此還會受到服務(wù)器請求頭長度的影響。
測試一下chrome中允許cookie的最大數(shù)量:
本文的setCookie函數(shù)是這篇文章:cookie是什么?cookie的設(shè)置/修改/獲取/刪除 里面定義的。
此外這篇文章完整總結(jié)了cookie在各瀏覽器的條數(shù)限制:HTTP協(xié)議對URI長度,POST數(shù)據(jù)長度及COOKIE長度限制說明
for (let i = 1; i <= 300; i++) {
setCookie('cookie' + i, "value" + i, 5);
}
結(jié)果如下:

let str = '';
for(let i=1;i<=5000;i++) {
str += "1";
setCookie("a",str,5);
setCookie("b",str,5);
setCookie("c",str,5);
setCookie("d",str,5);
setCookie("e",str,5);
}
console.log(document.cookie.length);
上例測試給a,b,c,d,e五個字段設(shè)置cookie,每個字段的最終長度都會受到瀏覽器限制,達不到5000,只能到4059字節(jié)。也就是說cookie的總長度=cookie(150)條數(shù) * 每條cookie長度(4059)約為0.58M但是每個瀏覽器的cookie條數(shù)不一樣,所以每個瀏覽器都有自己存儲的cookie總長度值。平時只要滿足瀏覽器值的瀏覽器(IE)就可以滿足所有瀏覽器了