专栏首页测试技术圈Cookie, Session, Token,WebStorage你懂多少?

Cookie, Session, Token,WebStorage你懂多少?

iTesting,爱测试,爱分享

最近遇见一个好玩的bug, 现象是页面刷新白屏,RootCause是Header里放的cookie太多了, 大小超出了4kb的限制.

解决方法很简单,拆出一部分放到LocalStorage.问题解决了,但是个人觉得很有意思,平常司空见惯的,觉得"假大空不接地气"的概念,其实都真真切切的在项目中体现了,只不过我们熟生轻视,看不见而已.遂记录本文.

面试的时候经常喜欢问一个问题,HTTP协议是有状态的还无状态的?很多同学都不知道,或者简单背一个答案,曰无状态.再问,那么HTTP协议如何保持状态?只有一小部分同学能答出来要用cookie和session.再问,有了cookie为什么还要session?更少一部分人能答出来安全。再问,不要cookie行不行?能答出URL重写的已经不错了。对于高级的测试,再继续深入,session保存在服务器内存中,随着用户的增多,服务器撑不住了怎么办?假设我使用了集群服务怎么办?这个时候聪明点的就会答sesion sticky, 或者使用Memcached集中所有session id了。但这也带来另外一个问题,session 服务器挂了怎么办?再弄个集群,有点傻吧,自然的,Token就被带出来了。然后再问Token一般怎么生成的啊?服务器生成,把user id+时间+私密签名用Base64加密生成,自己保存一份(不放内存放DB, 也可以不保存,那么收到客户端id就用加密算法再算一次生成token来对比), 发给客户端一份。能回答到这里的已经可以了。接着再顺便问一句,token里能不能保存敏感信息啊?为什么?(Base64是加密吗?

),什么是JWTtoken啊?token组成里的私密签名,是用什么加密的啊,顺便就把公钥私钥给理清楚了。对称算法,非对称算法也给考察了。如果有人答到这里,你还对他不放心的话,再问一句你听过iTesting吗?回答听过的你就收了吧,看我公号的人技术都不会太差:)。HTTP和HTTPS的核心区别是什么?能答出TCP请求并说出区别是SSL协议的你就收了吧。像什么get和post的区别,生成一个TCP请求包还是2个就不必要再纠结了, 能研究到这里的,测试肯定也能干好。

上面说了一堆,看出来了吗?一个问题考察多个层面并且都有联系,平常没点积累是不行的,我的文章要常常看啊

下面是一些总结:

cookie 和session的区别

  • 1. cookie放在客户端的浏览器上,session放服务器上。
  • 2. Session生成的Session id是在cookie里保存的,cookie被禁止后可以通过URL重写来继续使用session
  • 3. cookie不是安全,存放在本地的COOKIE可能被获取并进行COOKIE欺骗。
  • 4. session会给服务器带来压力,考虑到服务器性能,应当使用COOKIE。
  • 5. cookie只能保存字符串类型,以文本的方式。session通过类似与Hashtable的数据结构来保存,能支持任何类型的对象(session中可含有多个对象)
  • 6. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie, Session大小没限制。

Token 和Session区别

  • 1. Token放客户端, Session在服务端。
  • 2. Session是空间换时间, Token是时间换空间。
  • 3. Token解决了集群时候跨节点访问问题。

Cookie有限制,每次请求服务端必须带上,还有大小不能超过4kb,如果想突破这个限制怎么办?

WebStorage

为克服由cookie所带来的一些限制,当数据无需发回服务器时使用。

WebStorage两个主要目标:

  • 1. 提供一种在cookie之外存储会话数据的路径。
  • 2. 提供一种存储大量可以跨会话存在的数据的机制。

HTML5的WebStorage提供了两种API:

  • localStorage(本地存储)
  • sessionStorage(会话存储)

这两种区别在哪里?

  • 1、生命周期:

localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失。localStorage除非主动删除数据,否则数据永远不会消失。

sessionStorage的生命周期是在仅在当前会话下有效。sessionStorage引入了一个“浏览器窗口”的概念,sessionStorage是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源另一个页面,数据依然存在。但是sessionStorage在关闭了浏览器窗口后就会被销毁。同时独立的打开同一个窗口同一个页面,sessionStorage也是不一样的。

  • 2、存储大小:

localStorage和sessionStorage的存储数据大小一般都是:5MB

  • 3、存储位置:

localStorage和sessionStorage都保存在客户端,不与服务器进行交互通信。

  • 4、存储内容类型:

localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理。

  • 5、应用场景:

localStoragese:常用于长期登录(+判断用户是否已登录),适合长期保存在本地的数据。sessionStorage:敏感账号一次性登录;

Web Storage带来的好处:

  • 1、减少网络流量:

一旦数据保存在本地之后,就可以避免再向服务器请求数据,因此减少不必要的数据请求,减少数据在浏览器和服务器间不必要的来回传递 。

  • 2、快速显示数据:

性能好,从本地读数据比通过网络从服务器上获得数据快得多,本地数据可以及时获得,再加上网页本身也可以有缓存,因此整个页面和数据都在本地的话,可以立即显示 。

  • 3、临时存储:

很多时候数据只需要在用户浏览一组页面期间使用,关闭窗口后数据就可以丢弃了,这种情况使用sessionStorage非常方便。

注意:WebStorage这部分内容copy自网络,原创不可考。

- - 时人莫小池中水, 浅处不妨有卧龙 - -

作者: Kevin Cai, 江湖人称蔡老师。 两性情感专家,非著名测试开发。 技术路线的坚定支持者,始终相信Nobody can be somebody。

本文分享自微信公众号 - V社 北京社(SoftwareTesters)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • UI自动化(Webdriver+Appnium通吃方案)中验证码的识别方法(源代码)

    下载 tesseract-ocr-setup-3.02.02.exe安装(双击一路下一步然后finish),然后把tesseract-ocr的的安装目录添加到系...

    Criss@陈磊
  • 研发效能提升,测试如何量化度量

    在VUCA的互联网环境下,需求变更越来越快,交付周期却越来越短,如何量化测试工作?如何提高效能?

    Criss@陈磊
  • 为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢?

    我们知道网络层,可以实现两个主机之间的通信。但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据...

    Criss@陈磊
  • 我是如何面试QA的。

    最近遇见一个好玩的bug, 现象是页面刷新白屏,RootCause是Header里放的cookie太多了, 大小超出了4kb的限制.

    iTesting
  • 面试必问:session,cookie和token的区别

    cookie,session,token作为面试必问题,很多同学能答个大概,但是又迷糊不清,希望本篇文章对大家有所帮助

    cctester
  • 分布式web架构中对session同步的常用处理方法以及优缺点

    最近在读一本来自淘宝技术团队大牛的书,名字叫《大型网站系统与Java中间件实践》。开篇的章节详细地介绍了一个网站架构由小变大不断演进的过程,其中从单机架构升级到...

    HOHO
  • web服务器集群(多台web服务器)后session如何同步和共享

    在访问量上去以后,很多人会采用web集群的方式在满足逐渐增长的用户量。这时候就不得不面对一个问题,那就是在多个服务器下,每次请求都会因为负载均衡而分配到不同的服...

    wuweixiang
  • flask的cookie和session

      在Flask的框架中,自己已经封装了 cookie的respons,request 有存储就有读取及删除,那么就拿购物车来举例

    py3study
  • easywechat (在thinkphp5中使用easywechat完成微信网页认证)

    由于在easywechat中没有提及在thinkphp中的使用,后来我在http://www.thinkphp.cn/topic/45416.html中找到了有...

    lin_zone
  • TCP/IP(六)应用层(DNS和HTTP协议)

    前言 到这一篇我已经把TCP/IP五层模型详细的说明了一遍,大体的从物理层到最上层的应用层做了一个大概的了解,其实总体学下来东西非常的多,我们需要经常的去系统性...

    用户1195962

扫码关注云+社区

领取腾讯云代金券