当前位置:网站首页>一次搞明白 Session、Cookie、Token,面试问题全稿定
一次搞明白 Session、Cookie、Token,面试问题全稿定
2022-07-07 21:47:00 【小梧敲代码】
01、它们分别是什么?
session:
session的中⽂翻译是“会话”,当⽤户打开某个web应⽤时,便与web服务器产⽣⼀次session。服务器使⽤session把⽤户的信息临时保存在了服务器上,⽤户离开⽹站后session会被销毁。这种⽤户信息存储⽅式相对cookie来说更安全,可是session有⼀个缺陷:如果web服务器 做了负载均衡,那么下⼀个操作请求到了另⼀台服务器的时候session会丢失。
cookie:
cookie是保存在本地终端的数据。cookie由服务器⽣成,发送给浏览器,浏览器把cookie以kv形式保存到某个⽬录下的⽂本⽂件内,下⼀次请求同⼀⽹站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加⼊了⼀些限制确保cookie不会被恶意使⽤,同 时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。
cookie的组成有:名称(key)、值(value)、有效域(domain)、路径(域的路径,⼀般设置为全局:“”)、失效时间、安全标志(指定后,cookie只有在使⽤SSL连接时才发送到服务器(https))。
token:
token的意思是“令牌”,是⽤户⾝份的验证⽅式,最简单的token组成:uid(⽤户唯⼀的⾝份标识)、time(当前时间的时间戳)、sign(签名,由token的前⼏位+盐以哈希算法压缩成⼀定长的⼗六进制字符串,可以防⽌恶意第三⽅拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库。
02、它们之间有什么关系?
cookie,session都可以是token存储的一种方式。
cookie为存储在本地的数据,请求时会将该数据提交到服务器验证使用。
session为存储在服务器上的内存数据,只要会话没有中断,那么该数据持续有效。
toke通常上来说属于令牌,cookie,session为一种数据存储和使用方式,令牌可以存储在cookie,session,但是实际上通过url参数或者表单参数一样可以达到同样的效果。但是对于开发和维护来说成本较高,一旦后端要求修改参数,这样的使用方式对于修改来说是很头疼的事情。
03、它们本质上的区别?
session的使用方式是客户端cookie里存id,服务端session存用户数据,客户端访问服务端的时候,根据id找用户数据。
而token的使用方式是客户端里存id(也就是token)、用户信息、密文,服务端什么也不存,服务端只有一段加密代码,用来判断当前加密后的密文是否和客户端传递过来的密文一致,如果不一致,就是客户端的用户数据被篡改了,如果一致,就代表客户端的用户数据正常且正确。
流程:
session,注册登录->服务端将user存入session->将sessioni存入浏览器的cookie->再次访问时根据cookie里的sessionid找到session里的user。
token,注册登录->服务端基于用户信息与密钥生成一个token->将token+user 返回给浏览器->再次访问时传递token+user+密文数据,后台会再次使用user与密钥生成token,与传递过来的token比较,一致则正确。
session、cookie、token 这几个概念在面试中可以说是经常出现的,因为通过这个概念基本上可以了解到你对网络请求或者权限管理这一块是否有过了解和实际的应用。
最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!
这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。
点击文末小卡片领取 |
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
自学推荐B站视频:
零基础转行软件测试:自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!
边栏推荐
- Common verification rules of form components -2 (continuously updating ~)
- Cannot find module 'xxx' or its corresponding type declaration
- The free styling service of Dyson's official direct store is now open for appointment. Pioneer Technology interprets the styling concept of hair care and helps consumers unlock diversified and shiny s
- Leetcode206. Reverse linked list
- Remember an experience of using selectmany
- Line test - graphic reasoning -7- different graphic classes
- IP网络主动测评系统——X-Vision
- C development -- WPF simple animation
- How to judge whether the input content is "number"
- Revit secondary development - operation family documents
猜你喜欢
LeetCode707. Design linked list
Two methods of calling WCF service by C #
Ueeditor custom display insert code
UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xf9 in position 56: illegal multibyte sequence
Robot autonomous exploration DSVP: code parsing
面试百问:如何测试App性能?
行测-图形推理-7-相异图形类
Matplotlib quick start
Remember an experience of using selectmany
详解全志V853上的ARM A7和RISC-V E907之间的通信方式
随机推荐
Common verification rules of form components -2 (continuously updating ~)
PHP method of obtaining image information
「开源摘星计划」Loki实现Harbor日志的高效管理
如何选择合适的自动化测试工具?
Debezium series: binlogreader for source code reading
Ni9185 and ni9234 hardware settings in Ni Max
Aspose. Words merge cells
Class implementation of linear stack and linear queue (another binary tree pointer version)
软件测评中心▏自动化测试有哪些基本流程和注意事项?
JS number is insufficient, and 0 is added
ASEMI整流桥KBPC1510的型号数字代表什么
Add get disabled for RC form
Ueeditor custom display insert code
Revit secondary development - wall opening
Variables and constants
Leetcode94. Middle order traversal of binary trees
Line test - graphic reasoning - 4 - alphabetic class
LeetCode142. Circular linked list II [two pointers, two methods for judging links in the linked list and finding ring points]
XMIND mind mapping software sharing
Two methods of calling WCF service by C #