分享一个关于Cookie做的实验结果
实验本身是很枯燥的,我尽量把它讲的有趣些。
起因
去网上搜了下关于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


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
分享一个关于Cookie做的实验结果的更多相关文章
- 分享一个我自己做的 Excel 万年历
下载链接在此. 纯 Excel 公式实现,带农历,可自定义节日.配色. 带有紧凑日历和记事日历两种日历,均可直接 Ctrl+P 打印,且打印时不带有顶部的控制栏.
- 分享一个自己做的SpringMVC的PPT
分享一个自己做的SpringMVC的PPT,由于比较忙只写了一些重要的部分
- 分享一个文件查找、替换制定的字符或数字之CS程序、附带源码
首先就上操作流程图: 图--登陆界面.登陆密码:alidoing.com 图--界面说明(一看就懂) 图--文件查找到再替换 图--文件替换成功 图--替换后的文件 代码开始: 登陆的代码就非常简单. ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 分享一个漂亮的ASP.NET MVC界面框架
本文分享一个插件化的界面框架,该框架提供了用户.角色.权限管理功能,也提供了插件的管理和插件中心.下图是该界面框架的样式(全部源码和原理介绍下一篇分享,推荐越多,源码放的越早,呵呵). 要使用该界面框 ...
- [Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手"
[Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手" 我在学Unity3D,TankSniper(坦克狙击手)这个项目是用来练手的.游戏玩法来自这里(http://ww ...
- 分享一个快速设置背景的js 自动获取背景图的长宽
我来分享一个快速设置背景的js (需要jq支持!) 快速切图铺页面用---就是不需要手动输入背景图的长宽 自动获取背景图的长宽 : <div class="wrap"> ...
- 分享一个强大的采集类,还可以模拟php多进程
做采集的时候,可以使用file_get_contents()去获取网页源代码,但是使用file_get_contents采集,速度慢,而且超时时间,不好控制.如果采集的页面不存在,需要等待的时间很长. ...
- 分享一个安卓中异步获取网络图片并自适应大小的第三方程序(来自github)
安卓中获取网络图片,生成缓存 用安卓手机,因为手机流量的限制,所以我们在做应用时,要尽量为用户考虑,尽量少耗点用户的流量,而在应用中网络图片的显示无疑是消耗流量最大的,所以我们可以采取压缩图片或者将图 ...
随机推荐
- 【问题记录】springMVC @Valid使用不生效问题
问题描述 在网上找到如何使用@Valid注解后,就把用到的配置和jar包加上,然后测试发现一直不生效.下面是配置及解决方法 配置 1.引入依赖 2.添加相应的配置(springmvc配置文件) < ...
- ASP.NET MVC+LayUI视频上传
前言: 前段时间在使用APS.NET MVC+LayUI做视频上传功能的时,发现当上传一些内存比较大的视频就会提示上传失败,后来通过查阅相关资料发现.NET MVC框架为考虑安全问题,在运行时对请求的 ...
- Linux下运行windows 系统下编辑的Python脚本显示“: 没有那个文件或目录”的过程及解决方案
今天在 linux 系统下执行一windows下编辑的python脚本,提示(:没有那个文件或目录)英文提示:(:No such file of directory)如下: 查看文件的权限发现并没有问 ...
- 数位DP 学习笔记
前言:鸣谢https://www.luogu.com.cn/blog/virus2017/shuweidp.感谢大佬orz ----------------------------- [引入] 首先要 ...
- 【PA2014】Bohater 题解(贪心)
前言:一道经典贪心题. -------------------------- 题目链接 题目大意:你有$z$滴血,要打$n$只怪.打第$i$只怪扣$d_i$滴血,回$a_i$滴血.问是否存在一种能够通 ...
- 003_go语言中的变量
代码演示: package main import "fmt" func main() { var a = "initial" fmt.Println(a) v ...
- 【Python笔记】2020年7月22日练习=[定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程的两个解]
学习教程:廖雪峰-Python教程-函数-函数定义 学习记录:[定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程的两个解] 学习心得: 1.对问题进行判断分析后再下手. ...
- c++之广度优先搜索
广度优先搜索BFS(Breadth First Search)也称为宽度优先搜索,它是一种先生成的结点先扩展的策略. 在广度优先搜索算法中,解答树上结点的扩展是按它们在树中的层次进行的.首先生成第一层 ...
- java web应用启动报错:Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.
Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use. The serve ...
- Java—包装类/System类/Math类/Arrays类/大数据运算/Collection接口/Iterator迭代器
基本类型包装类 8种基本类型对应的包装类如: 将字符串转成基本类型: 将基本数值转成字符串有3种方式: 基本类型直接与””相连接即可:34+" " 调用String的valueOf ...