哈喽。大家好,我是思思。这一篇文章我们将彻底了解cookie、session、token到底是个啥?为什么要用到这些技术?
学完这节课,必须掌握的内容有:
1.cookie特点及应用场景
2.session工作流程
3.普通登录使用cookie和session机制流程
4.token原理及应用场景
目录
前言:无状态的HTTP协议
Web应用中,http协议是无状态的。也就是说你这次访问了服务器,关闭网页,再次访问服务器,服务器是不知道又是你来访问的。
总结:HTTP协议最大的特点就是每一次通信,页面加载完成,通信结束,连接就断开。
不知道是我访问,怎么保持登录状态呢?但是登录后后的网站为什么不需要再次登录账号和密码了呢?同学们,你们有没有这样的困惑呢?
其实核心的问题在于存储,比如我们在仓库管理系统wms上注册了以后,wms系统就会把该账号和密码存储在数据库里。下次再次请求系统时,wms就会根据输入的用户名密码,和db做比对。匹配成功就登录成功。
问题来了,假如我不想每次请求wms系统的时候,都要输入用户名和密码怎么办?
思考:能不能把用户名密码存储在浏览器呢?
一.cookie概念及流程
1.cookie特点
cookie是客户端技术,可以将数据存储到客户端(浏览器),然后每次请求访问的时候,都会携带 cookie 数据访问。其特点有:
1) cookie数据由服务器生成,发送给浏览器保存
2)cookie是一门客户端缓存技术
3)cookie数据格式:key-value
4) cookie数据过期机制:设置expire值
2.cookie使用场景举例
- 记住我
- 未登录的购物车
以wms系统的登录功能为例,第一次访问网站输入用户名密码时,可以选择让系统记住用户名密码,下次就不用重新输入了,这就是典型的Cookie的应用。
1)打开wms网站,输入用户名和密码,点击记住密码:
2)点击退出登录
3)登录页面再次登录发现用户名和密码已经被记住在对应的textbox里(从cookie里取出的数据)
3.总结cookie流程
cookie来自于服务器,存储于浏览器,再发送到服务器。
- 首先用户在客户端浏览器向服务器首次发起登录请求
- 登录成功后,服务端会把登录的用户信息设置在cookie中,并将cookie返回给客户端浏览器
- 客户端浏览器接收到cookie请求后,会把cookie保存在本地
- 以后再次访问该web应用时,客户端浏览器就会把本地的cookie带上,这样服务端就能根据cookie获得用户信息了
注意点:
- 第一次发送请求的时候是没有附带cookie的,因为服务器收到请求才会设置cookie。
- 只要是在有效期内,关闭浏览器再次打开依然是可以获取到用户名及密码值的。
- cookie 常用来标记用户或授权会话,被浏览器发出之后可能被劫持,被用于非法行为,可能导致授权用户的会话受到攻击,因此存在安全问题。
二.session概念及流程
session是标记放在你浏览器,但是数据在网站服务器数据
1.session的特点
1)session是一门服务端会话缓存技术。
2)session由服务器端的web容器创建,保存在服务器端。
3)session保存数据:键值对形式
4)session过期:默认30分钟
session 和 cookie 没有直接的关系。可以认为 cookie 只是实现 session 机制的一种方法途径而已,没有 cookie 还可以用别的方法。
2.session流程
首先用户登录,server 会为用户生成一个 session,为其分配唯一的 sessionId,这个 sessionId 是与某个用户绑定的,也就是说根据此 sessionid(假设为 abcd) 可以查询到它到底是哪个用户,然后将此 sessionid 通过 cookie 传给浏览器,sessionId 需要借助 cookie 的传递才有意义。
- 首先用户在客户端浏览器发起登录请求
- 登录成功后,服务端会把用户信息保存在服务端,并返回一个唯一的session标志给客户端浏览器
- 客户端浏览器会把这个唯一的session标识保存起来
- 以后再次访问web应用时,客户端浏览器会把这个唯一的session标识带上,这样服务端就能根据这个唯一标识找到用户信息
三.利用cookie和session技术相结合实现登录流程
1.普通登录流程
- 用户在浏览器端输入用户名和密码。
- 浏览器将用户输入的用户名和密码打包成一个HTTP请求发送给服务器。
- 服务器接收到请求后,对用户名和密码进行校验。
- 如果用户名和密码正确,服务器会生成一个session ID(会话标识),并将该session ID 存储在服务器端。
- 然后服务器将生成的session ID 通过Set-Cookie的方式将其返回给浏览器端。Set-cookie是一个HTTP响应头字段,用于设置Cookie。
- 浏览器接收到服务器返回的session ID 后,会将该session ID 存储在本地的cookie中。
- 当用户发起下一次请求时,浏览器会自动将存储在cookie中的Session ID 添加到该请求的HTTP头部中。
- 服务器通过读取请求中的session ID 来验证用户的身份。
上述过程中,用户的身份信息不会直接传输给服务器,而是通过session ID 进行验证。这样做的好处是可以减少敏感信息的传输,并增加登录的安全性。
2.使用cookie和session弊端
cookie有安全隐患,浏览器遭受攻击,无法解决跨域问题
session在集群的环境中,通过某个服务进行了session的存储,但下一次请求进来的时候可能经过负载均衡,就将其放到了另外一个服务上,但这个服务并没有上一次的session,就无法再次进行身份识别了,这个session也会失效
四.token的使用
token 是令牌的意思,由服务端生成并发放给客户端,是一种具有时效性的验证身份的手段。Token 避免了 Session 机制带来的海量信息存储问题,也避免了 Cookie 机制的一些安全性问题,在现代移动互联网场景、跨域访问等场景有广泛的用途。请求完登录接口,后端会返回token,前端保存起来,并且封装你的网络请求,并在所有的请求头里,统一都把这个token带上,然后就可以跳转到登录页了。服务器一般会给token设置有效期,token失效后,接口就会返回一个特定的状态码(一般是401)。token作为接口测试时的鉴权码,一般情况下登陆后才可以获取到token,然后在每次请求接口时需要带上token参数。
1.token特点
- token 可以跨站共享,实现单点登录;
- token 机制无需太多存储空间。token 包含了用户的信息,只需在客户端存储状态信息即可,对于服务端的扩展性很好;
- token 机制的安全性依赖于服务端加密算法和密钥的安全性;
2.C/S交互图
- 客户端将用户的账号和密码提交给服务器;
- 服务器对其进行校验,通过则生成一个 token 值返回给客户端,作为后续的请求交互身份令牌;
- 客户端拿到服务端返回的 token 值后,可将其保存在本地,以后每次请求服务器时都携带该 token,提交给服务器进行身份校验;
- 服务器接收到请求后,解析关键信息,再根据相同的加密算法、密钥、用户参数生成 sign 与客户端的 sign 进行对比,一致则通过,否则拒绝服务;
- 验证通过之后,服务端就可以根据该 token 中的 uid获取对应的用户信息,进行业务请求的响应。
3.实例理解token
首次访问
输入正确的用户名密码后【用户名:admin 密码:123456】
此时,我们不关闭浏览器,在新开一个窗口,访问同样的资源,可以发现不用登录。
cookie、session、token 这三者是不同发展阶段的产物,并且各有优缺点,三者也没有明显的对立关系,反而常常结伴出现,这也是容易被混淆的原因。
cookie 侧重于信息的存储,主要是客户端行为。session 和 token 侧重于身份验证,主要是服务端行为。
高频面试题:
问:谈谈cookie、session和token的区别
答:cookie是存储在浏览器端的一小段文本数据,cookie的内容会随着http请求一起发送到服务端
session是存储在服务端的一组数据,一些网站是采用session机制来验证用户身份的,通常会把sessionId存储在cookie里
token在很多地方都会用到,token可以存储在cookie里,也可以存储在服务器的内存或者其他地方。token作为接口测试时的鉴权码,一般情况下登陆后才可以获取到token,然后在每次请求接口时需要带上token参数。
---------------------------------------------------------------------------------------------------------------------------------
免费提供接口测试大讲堂所有的讲义和本人讲的视频。🌏:sisiceshi