会话跟踪技术概述
会话 :
用户打开浏览器,访问web服务器的资源, 会话就会建立, 直到有一方断开连接 ,会话结束
- 在一次会话中可以包含多次请求和响应
- 即使是一个客户端上, 但是如果使用的是不同的浏览器肯定也是不同的会话
- 也就是我们的会话不是以客户端为单位, 而是以浏览器为单位
会话跟踪:
一种维护浏览器状态的方法, 服务器需要识别多次请求是否来自同一浏览器, 以便在同一次会话的多次请求间共享数据
会话跟踪图解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mTBb6ik5-1656609900620)(E:\非凡英才\JavaWeb开发\Servlet\图解\会话跟踪图解.png)]
因为HTTP协议是无状态的, 所以每次浏览器向服务器发送请求时, 服务器都会将其视为新的请求, 所以我们服务器就无法判断哪些请求是来自于同一浏览器的了, 但是我们往往同一浏览器的多次请求之间要进行数据共享, 所以我们就要使用会话跟踪技术, 来让一次会话中的多个请求之间可以进行数据共享.
- 那么为什么一个浏览器中发送的多个请求往往都要数据共享?
- 举个例子: 比如我们在逛淘宝的时候, 如果将一个商品加入到了购物车之后, 此时购物车中就会有一个对应的商品, 此时我们去点击到购物车中的时候对应的我们找到对应的商品之后就会显示对应的物品信息, 我们就可以直接支付, 这个时候我们第一次请求是加了一个购物车, 然后点击到购物车中的时候又是一次新的请求, 由于HTTP协议是无状态的, 如果不使用会话跟踪技术的时候就是不能进行数据共享的, 所以我们按理购物车中就不会有我们上一次请求到的数据, 也就是加了购物车之后购物车中也不会有信息的, 也就是任意两个请求之间都不能有数据共享
- 但是实际中我们将商品假如到购物车中之后对应的购物车中就要将数据存储下来, 所以就是一种多次请求之间的数据共享
- 还有就是我们输入验证码的时候, 第一次的访问的时候是向后端发送一个请求获取到一个验证码, 然后第二次我们输入内容之后点击验证之后又是第二个请求, 这个时候如果两次请求不能共享数据的话我们当第二次请求的时候第一次请求获取到的验证码就应该是获取不到了, 那么就判断不了输入的验证码是否正确了
有的人会问什么HTTP协议不设置为有状态的?
- 因为如果设置为有状态的, 那么我们每次请求数据中都要包含上次的请求的数据 ,最终会导致请求次数越多, 我们的请求数据体就会越来越大, 请求效率响应的也会变慢, 所以我们的HTTP协议就设置为了无状态的, 请求的效率就会高很多
会话跟踪技术的两种实现方式:
- 客户端会话跟踪技术 : Cookie
- 服务端会话跟踪技术 : Session