前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初识session、cookie和token

初识session、cookie和token

作者头像
用户5521279
发布2019-07-10 14:57:02
6300
发布2019-07-10 14:57:02
举报
文章被收录于专栏:搜狗测试搜狗测试

由于之前接触的项目业务特点,小编还没有深入了解过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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档