目录
什么是会话?
会话跟踪
为什么要在同一次会话的多次哀求共享数据?
方式一:Cookie
HttpServletResponse
方式二:Session
什么是会话?
在web开发中,会话指的是浏览器与服务器之间的一次毗连,我们称为一次会话。
会话跟踪
服务器需要识别多次哀求是否来自于同一浏览器,以便在同一次会话的多次哀求间共享数据。
为什么要在同一次会话的多次哀求共享数据?
登录的过程中有验证码,这个验证码是哀求服务器端动态天生的,所从前端要想呈现出这个验证码,此时要发送哀求给服务器端,服务器端天生一个验证码后,再将这个验证码图片响应给前端,前端再将其展示出来,这次哀求完成后会话就建立了,然后输入用户名暗码和验证码后就可以点击登录,当点击登录按钮的时候又要发送第二次哀求,那这次哀求的就是登录接口,在服务器端依然要校验验证码的正确性,而正确的验证码是上一次哀求天生的,那上一次天生的验证码之后它会把这个验证码记下来,然后在登录的过程中会将页面通报的验证码和正确的验证码进行比对,如果页面通报的验证码和上一次哀求的验证码是一致的,这个时候就代表这个验证码是正确的
第一次哀求需要记录验证码的值是多少,而第二次发起登录哀求的时候,它又要去获取上一次登录哀求的这个数据,这个时候就要在同一次会话的多次哀求之间共享数据了,那就可以通过会话跟踪技术解决这个问题
会话跟踪技术有两种
方式一:Cookie
cookie是客户端会话跟踪技术,它是存储在客户端浏览器的,
当我们在浏览器端直接访问登录这个接口时,如果所通报的用户名和暗码都是正确的,此时就可以乐成登录,登录乐成后我们就可以在服务器端创建这么个Cookie对象,然后将多次哀求之间需要共享的数据存储在Cookie中,好比在Cookie中存储当前用户存储乐成的标识,然后紧接着就可以给前端响应数据了,而在响应数据的时候,这个Cookie会自动的响应给浏览器,而浏览器担当这个Cookie后,浏览器会自动的把这个Cookie存储在当地,并且在之后的每一次哀求中,都会将这个Cookie自动的携带到服务器端,服务器端拦截到前端所发起的哀求后就可以获取到Cookie中存储的数据了,然后去校验这个用户的登录信息是否存在,如果这个用户已经登录了,我们就直接放行,让它去访问对应的资源,如果携带过来的Cookie并没有存储用户的信息,就直接给前端响应一个错误的结果,那他去登录就可以了,这就是基于Cookie对话的流程
那为什么一切都是自动的呢?
Cookie固然不是http协议的一部门,但是在http协议中对Cookie提供了支持,提供了两个头,一个是响应头,一个是哀求头,当我们在服务器端给前端响应Cookie的时候,最终会自动的在响应头中添加(Set-Cookie)告诉浏览器我们要设置Cookie了,Cookie内里存储的数字形式就是Key=value,紧接着浏览器接收到相应返来的数据之后,一旦发现有个(Set-Cookie)的响应头,它就将这个Cookie自动的生存到浏览器当地,并且在之后的每一次哀求后,它都会将浏览器生存的Cookie携带到服务器端
由于在HTTP协议中又提供了别的一个哀求头,这个哀求头叫Cookie,在Cookie这个哀求头中,它就会自动的将当前浏览器所生存的Cookie数据一并携带到服务器端,服务器端就可以获取到哀求头传来的Cookie,然后去校验当前Cookie是否存储当前登录的用户信息,这就是Cookie的优点,它是HTTP协议中所提供的两个技术,一个相应头,一个哀求头
HttpServletResponse
HttpServletResponse服务器对客户端的 HTTP 响应
方式二:Session
是服务器端会话跟踪技术,所以是存储在服务器端的。
浏览器在第一次哀求服务器的时候,我们就可以直接在服务器当中来获取到会话对象Session。如果是第一次哀求Session ,会话对象是不存在的,这个时候服务器会自动的创建一个会话对象Session 。而每一个会话对象Session ,它都有一个ID(表示图中Session后面括号中的1,就表现ID),我们称之为 Session 的ID。
接下来,服务器端在给浏览器响应数据的时候,它会将 Session 的 ID 通过 Cookie 响应给浏览器。其实在响应头当中增加了一个 Set-Cookie 响应头。这个 Set-Cookie 响应头对应的值是不是cookie? cookie 的名字是固定的 JSESSIONID 代表的服务器端会话对象 Session 的 ID。它会在响应头Set-Cookie中,将服务器端当前会话对象Session的id值一并返回给浏览器,浏览器会自动识别这个响应头,然后自动将Cookie存储在浏览器当地。
接下来,在后续的每一次哀求当中,都会将 Cookie 的数据获取出来,并且携带到服务端。接下来服务器拿到JSESSIONID这个 Cookie 的值,也就是 Session 的ID,是Session会话的唯一标识。那就可以根据这个标识找到对应的Session会话对象,然后再从会话对象中获取到我们之前存储的信息
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |