专栏首页搜狗测试初识session、cookie和token

初识session、cookie和token

由于之前接触的项目业务特点,小编还没有深入了解过session、cookie和token机制,直到最近开启了一个新项目,新项目因为涉及到“钱”,必须知道要给每个用户有多少钱、发多少钱。那么凡是涉及“钱”的问题都是比较严肃的问题,所以开发大大们也不遗余力的设计各种保证安全的实现方案。

根据在测试执行过程中遇到相关知识,简单了解了一下 “session、cookie和token”相关机制。希望可以给有同样困惑的小白盆友们散开一些迷雾

背景

我们都知道http是一个无状态协议,每一次请求和上一次请求之间是没有任何关系,即各个请求间是相互独立的。对于单纯浏览网站来说是完全没有问题的,但是科技就是要改变生活,我们又会有诸如登录、购物、游戏等需求。那么怎么才能在众多的网络请求中区分哪些是你发的,哪些是小白发的,登录是一个不错的选择,但是聪明的大佬们怎么可能为了区分用户,在每次请求都进行一次登录,那么就必须找到能区分不同用户的手段,cookie、session和token的发明都能够明确服务端在为哪个客户端提供服务。

cookie

cookie是保存在客户端本地的数据,是一个很小的文本文件。一般客户端是浏览器。Cookie是由服务器生成,每次有新用户对服务器进行访问时,服务器生成cookie发送给浏览器,浏览器将服务器返回的cookie以键值对形式保存在本地某个目录下的文本文件内,浏览器在下一次请求同一网站时会把该cookie发送给服务器,服务器检查到该请求有cookie,则知道与这个用户之前有过交互。

cookie是存储在客户端上,所以浏览器加入了一些限制确保cookie不会被恶意使用:只允许被创建的域对cookie进行读写;cookie的过期时间一般在关闭浏览器就会自动删除,当然也可以进行一些设置使其有效期更长一些;同时不会占据太多磁盘空间,浏览器最多允许存cookie文件的数量是300个,每个文件大小也有4kB的限制,同时每个域的cookie数量是有限的,最多支持20个,如果达到上限,浏览器就会自动随机对cookie文件进行删除

session

session是保存在服务器端的数据,session翻译成中文是“会话”的意思,当用户打开访问服务器时,此时服务器就会产生一次session,并且为客户端分配一个session_id,客户端保存下来。之后客户端每次请求时都带着这个session_id,可以理解为客户端篡改也没用,因为服务端保存了这个session_id,会对请求的session_id进行校验。

服务器使用session把用户的信息临时保存在了服务器上一般是在内存,磁盘,或者数据库。用户离开网站后session会被销毁。

token

token的意思是“令牌”,是用户身份的验证方式,当用户第一次登录后,服务器生成一个token并将此token返回给客户端,客户端保存此token,之后请求只需带上这个token前来请求数据即可,无需再次带上用户名和密码,服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回数据。同时token也可以设置有效期,可以在每次请求时验证token及有效期

token是无状态、可扩展,在服务端的内存中是不存储的,支持移动设备,跨程序调用,更加安全

以上看起来貌似都是请求时客户端携带“身份证”,服务端验证身份证来区分用户。下面看看他们几个的区别:以上看起来貌似都是请求时客户端携带“身份证”,服务端验证身份证来区分用户。下面看看他们几个的区别:

cookie 、session和token的区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie的大小及文件数量是有限制的

3、cookie是不安全的,可以分析存放在本地的COOKIE通过发送模拟请求来刷接口。当然真正实现中肯定会有防篡改的机制,如使用只有客户端和服务端知道的秘钥生成签名,但由于cookie是明文,所以一般不会放敏感信息

4、session保存在服务端,自然相对安全,同时只需要在客户端保存一个session_id,能够解决cookie存在的安全性问题

5、session是存储在服务器的文件,如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失

6、token 可以避免 CSRF 攻击。token的状态是存储在客户端。token 可以是无状态的,顶多是失效后重新登录,同时可以在多个服务间共享

参考来源

https://blog.csdn.net/jikeehuang/article/details/51488020

https://www.cnblogs.com/moyand/p/9047978.html

https://www.jianshu.com/p/bd1be47a16c1

https://junyiseo.com/php/757.html

https://segmentfault.com/a/1190000017831088

本文分享自微信公众号 - 搜狗测试(SogouQA),作者:EnjoY

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

原始发表时间:2019-07-08

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 接口测试之文件重定向法

    部署方法: 第一步:部署一台测试服务器,找一款可以访问服务器的软件,例如:WinSCP; 第二步:前端预先将客户端返回的数据格式以及数据字段保存在本地,例如:...

    用户5521279
  • Fiddler不为人知的小秘密(二)

    第一步:客户端发起明文请求:将自己支持的一套加密规则、以及一个随机数(Random_C)发送给服务器 第二步:服务器选出一组加密规则和hash算法,并将自...

    用户5521279
  • 测试数据统计的那些事儿

    请求以POST方式进行发送,将需要收集的动作参数进行加密封装,发送到目标服务器后需要解密,然后进行统计。

    用户5521279
  • 某些浏览器中因cookie设置HttpOnly标志引起的安全问题

    作者 Taskiller 1、简介 如果cookie设置了HttpOnly标志,可以在发生XSS时避免JavaScript读取cookie,这也是HttpOnl...

    FB客服
  • 一文彻底理解cookie,session,token【专业版】

    1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, ...

    软测小生
  • WEB性能--HTTP 2.0介绍

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    从入门到进错门
  • 当AI泡沫破裂时……

    很显然我们目前处于一个不稳定的状态。这到底是一场泡沫还是一次革命?答案是当然包含一点革命——深度神经架构所创造的实实在在的成功已经颠覆了视觉和语音识别领域,更通...

    机器之心
  • 还分不清 Cookie、Session、Token、JWT?

    cookie 重要的属性属性说明name=value键值对,设置 Cookie 的名称及相对应的值,都必须是字符串类型

    coder_koala
  • Let’s Encrypt 宣布 ACME v2 正式支持通配符证书

    Let’s Encrypt 宣布 ACME v2 正式支持通配符证书。Let’s Encrypt 宣称将继续清除 Web 上采用 HTTPS 的障碍,让每个网站...

    Zach
  • gRPC in ASP.NET Core 3.0 -- Protocol Buffer(1)

    现如今微服务很流行,而微服务很有可能是使用不同语言进行构建的。而微服务之间通常需要相互通信,所以微服务之间必须在以下几个方面达成共识:

    solenovex

扫码关注云+社区

领取腾讯云代金券