实验本身是很枯燥的,我尽量把它讲的有趣些。

起因

去网上搜了下关于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做的实验结果的更多相关文章

  1. 分享一个我自己做的 Excel 万年历

    下载链接在此. 纯 Excel 公式实现,带农历,可自定义节日.配色. 带有紧凑日历和记事日历两种日历,均可直接 Ctrl+P 打印,且打印时不带有顶部的控制栏.

  2. 分享一个自己做的SpringMVC的PPT

    分享一个自己做的SpringMVC的PPT,由于比较忙只写了一些重要的部分

  3. 分享一个文件查找、替换制定的字符或数字之CS程序、附带源码

    首先就上操作流程图: 图--登陆界面.登陆密码:alidoing.com 图--界面说明(一看就懂) 图--文件查找到再替换 图--文件替换成功 图--替换后的文件 代码开始: 登陆的代码就非常简单. ...

  4. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  5. 分享一个漂亮的ASP.NET MVC界面框架

    本文分享一个插件化的界面框架,该框架提供了用户.角色.权限管理功能,也提供了插件的管理和插件中心.下图是该界面框架的样式(全部源码和原理介绍下一篇分享,推荐越多,源码放的越早,呵呵). 要使用该界面框 ...

  6. [Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手"

    [Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手" 我在学Unity3D,TankSniper(坦克狙击手)这个项目是用来练手的.游戏玩法来自这里(http://ww ...

  7. 分享一个快速设置背景的js 自动获取背景图的长宽

    我来分享一个快速设置背景的js (需要jq支持!) 快速切图铺页面用---就是不需要手动输入背景图的长宽 自动获取背景图的长宽 : <div class="wrap"> ...

  8. 分享一个强大的采集类,还可以模拟php多进程

    做采集的时候,可以使用file_get_contents()去获取网页源代码,但是使用file_get_contents采集,速度慢,而且超时时间,不好控制.如果采集的页面不存在,需要等待的时间很长. ...

  9. 分享一个安卓中异步获取网络图片并自适应大小的第三方程序(来自github)

    安卓中获取网络图片,生成缓存 用安卓手机,因为手机流量的限制,所以我们在做应用时,要尽量为用户考虑,尽量少耗点用户的流量,而在应用中网络图片的显示无疑是消耗流量最大的,所以我们可以采取压缩图片或者将图 ...

随机推荐

  1. 远光武汉研发中心区块链事业部Java面试总结

    面试在约定的时间准时进行,也是采用腾讯会议远程面试的方式.但是这是我第一次遇到面试官未打开摄像头的情况,后面经过沟通,双方都打开摄像头进行交流. 之前了解这个岗位主要是区块链相关的Java开发,所以事 ...

  2. ASP.NET Core 监听SQL Server数据库的实时信息

    1.开发环境: 开发工具:Visual Studio 2019 数据库:SQL Server2012 开发环境:.Net Core 3.1 2.使用技术: Signalr:实现消息推送 SqlDepe ...

  3. Python 字典(Dictionary) len()方法

    Python 字典(Dictionary) len()方法 描述 Python 字典(Dictionary) len() 函数计算字典元素个数,即键的总数.高佣联盟 www.cgewang.com 语 ...

  4. Skill 脚本演示 ycMPPTap.skl

    https://www.cnblogs.com/yeungchie/ ycMPPTap.skl 主要用于创建自定的 Tap 类型(指定 掺杂类型 / Via 数量 / Active 宽度),并可以通过 ...

  5. mongoDB数据库原生配置

    最近小冷在工作中使用到了mongoDB数据库,所以就简单的写了个demo,和大家简单分享下,如果大家也有想分享的东西或者需要分享的东西,生活或者其他都行,可以关注小冷公众号秦川以北或者加小冷微信qxy ...

  6. 好用的连接池-HikariCP

    在Springboot的发展历程中,默认的DataSource也从Springboot1.x的tomcat连接池到Springboot2.x的HikariCP.关于HikariCP的简单使用在配置多数 ...

  7. SAFe必备——提高团队敏捷性

    规模化敏捷之于项目群,就像Scrum之于敏捷团队.为了创建高质量业务解决方案,企业需要提高自身能力,提升团队和技术敏捷性,实现真正的规模化敏捷. 敏捷发布火车 实现团队和技术敏捷性,首先需要敏捷团队围 ...

  8. .NetCore 配合 Gitlab CI&CD 实践 - 开篇

    引言 这是一个系列的文章,讲述的是一个中小型开发团队如何从零开始使用搭建基建 GitLab 代码托管平台,以及使用 GitLab Runner 实现 CI/CD 的故事.本系列通过部署一个完整的 .n ...

  9. 六种酷炫Python运行进度条

    本文介绍了目前6种比较常用的进度条,让大家都能直观地看到脚本运行最新的进展情况 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做 ...

  10. Jenkins=====》部署到构建完成

    目录 序言 正文 插件 系统管理 构建Maven项目 结尾 序言 ​ 大家好,我是龙宝,来自一个正在爬坑的java程序员,欢迎观看这一期的jenkins部署篇(V_V) 正文 ​ 这里我们直接上图看步 ...