起因
去网上搜了下关于Cookie的介绍,看了好几篇都长得很一样,阉割一下内容不外乎说是"不同浏览器限制cookie数不同,大致在30-50这个范围,(前缀)浏览器允许Cookie多达4KB左右,包括名、值、等号"。
我还在上学那会儿,包括后面毕业后工作一段时间,我也没有特别去关注过这个话题,基本上如果面试官问到我了,也就把网上知道的这些讲了一下。
今年的遭遇给了我思考的时间特别多,最近我又重新去仔细读了下楼上那句话,我发现我读不懂了,第一个,我看的资料并不是特别权威的,也都是网上的博客帖子,对浏览器限制30-50个这个范围产生了一个质疑,是真的吗?第二个是允许多达4KB左右,就很迷糊,到底是一个域名下所有的Cookie加起来的值是4KB左右,还是说单独的Cookie的一个Name所表示的信息它可以是4KB左右,这让我很迷啊。
行,那我们接下来就做个关于Cookie的实验,去验证一些东西。
因为这只是一个实验,所有这里笔者不会讲Cookie的使用和作用以及其他介绍。大致理一下,我们要验证的一些点如下:
- 单个域名下浏览器Cookie限制个数为多少?
- 浏览器Cookie单个Value值可以允许多大?
经过
建模
在开始实验之前,我们先建个模型,大致这个实验它要怎么展开,上图。
起初笔者是提供了一个手动挡的模型,你可以试着输入name和value,然后点击按钮Add Cookie,它就会把这条记录写到Cookie里面,为了便于对照,笔者又读取了cookie的信息同步了一份到网页上,看着直观点。由于我们要记录Cookie数,这里笔者简单粗暴地把它设置在网页可视内容的右上角,那个冒红的地方。再后来笔者想偷点懒,就实现了一个随机生成Cookie的手动挡模型Add Random Cookie。后续的所有实验结果也都是在这个基础上得出来的。
写好程序后,笔者首先在Chrome最新版浏览器测试了下。发现的规律是,当Cookie的个数达到180个后,再增加就会降到150个,就是说180是它的上限,到了以后它自动清掉了30个选手。
这里有个问题是,笔者当时也是直接随机了两次分别塞到name和value上面。通过观察,我们很难发现到达上限以后它删除的规律是怎么样的,是删除最前面的30个,还是后面的30个,还是随机的呢?
好,我们改一下,我们的肉眼对数字会敏感一些,那我们就把它的value全部换成数字去看看。
可以看到它是删除了最前面的30个cookie记录。
笔者在自己的手机里,通过打开小米内置浏览器的结果也是和这个一样的。
接下来我们测下在火狐浏览器的情况,笔者电脑上火狐浏览器的版本还是比较低的,没有升级到最新版,因为48.0.2这个版本它可以直接手动安装一些xpi
插件,笔者就是在这个版本安装上了firebug和一起其他插件。
通过观察,我们可以看到,在火狐浏览器中,它的规律是当cookie的个数达到150个以后,它会删除最开始的Cookie,空出位置留个新添加的Cookie,它的上限是150个,后续再添加一个Cookie记录就删除最前面的cookie记录空出位置留给后面添加的。
到这里,笔者将相关的Cookie信息整理成文件,随机两个的结果是6KB左右,随机一个加阿拉伯的结果是3KB左右。看到这里,我们猜也能猜到了,最开始说的4KB限制,应该是指Cookie设置的一条记录。
当然,我们学理科是很严谨的,我们通过实验去看看结果吧。
笔者写了个测试程序,经过测试,在Chrome浏览器端的条件下发现,大约是4KB的样子。
结果
结论
因为浏览器的种类和版本都很多,所有在写结果之前,笔者会在前面加上“在一定条件下”。看着像句屁话,但它真的很有用,给你后面的话加了一条保险杠的效果。就好比文科作文写“XXX万岁”。
在一定条件下,基于Webkit内核的浏览器,Cookie呈现如下规律,当单个域名下Cookie数到达180个的时候,再次添加会删除最开始的30个Cookie里路,然后从150的基数依次往上增加直至180个后,浏览器会循环前面的操作。 在一定条件下,基于gecko内核的浏览器,Cookie呈现如下规律,当单个域名下Cookie数到达150个后,再次添加它会删除最前面的Cookie记录以腾出位置给添加的Cookie记录。 在一定条件下,Cookie单条记录的Value值允许大小近似于4KB。
最后
最后,附上实验相关地址:https://zhengjiangtao.cn/show/zj/cookie.html
有兴趣的同学也可以看下我打基础写的其他网页,它的项目地址是:https://zhengjiangtao.cn/show
本文分享自微信公众号 - 前端路桥(ataola),作者:丰臣正一
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2020-08-24