- 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
○从浏览器发出请求到服务端响应数据给前端之后,一次会话(在浏览器和服务器之间)就会被建立了
○会话被建立后,如果浏览器或服务端都没有被关闭,则会话就会持续建立着
○浏览器和服务器就可以继续使用该会话进行请求发送和响应,上述的整个过程被称之为会话
- 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据
○服务器会收到多个请求,着多个请求来自多个浏览器
○服务器需要用来识别请求是否来自同一个浏览器
○服务器用来识别浏览器的过程就是会话跟踪
○服务器识别浏览器后就可以在同一个会话中多次请求之间来共享数据
- 为什么现在浏览器和服务器不支持数据共享呢?
○浏览器和服务器之间使用的是HTTP请求来进行数据传输
○HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求
○HTTP协议设计成无状态的目的是让每次请求之间相互独立,互不影响
○请求与请求之间独立后,就无法实现多次请求之间的数据共享
- 如何实现会话跟踪技术
○客户端会话跟踪技术:Cookie
○服务端会话跟踪技术:Session
这两个技术都可以实现会话跟踪,它们之间最大的区别:Cookie是存储在浏览器端,而Session是存储在服务器端
1. 概念
Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
2. Cookie的工作流程
- 服务端提供了两个Servlet,分别是ServletA和ServletB
- 浏览器发送HTTP请求1给服务端,服务端ServletA接受请求并进行业务处理
- 服务端ServletA在处理的过程中可以创建一个Cookie对象并将name=zs的数据存入Cookie
- 服务端ServletA在响应数据的时候,会把Cookie对象响应给浏览器
- 浏览器接收到响应数据,会把Cookie对象中的数据存储在浏览器内存中,此时浏览器和服务端就建立了一次会话
- 在同一次会话中浏览器再次发送HTTP请求2给服务端ServletB,浏览器会携带Cookie对象中的所有数据
- ServletB接受到请求和数据后,就可以获取到存储在Cookie对象中的数据,这样同一个会话中的多次请求之间就实现了数据共享
3. Cookie的基本使用
对于Cookie的使用,我们更关注的应该是后台代码如何操作Cookie,对于Cookie的操作主要分两大类,本别是发送Cookie和获取Cookie
①创建Cookie对象,并设置数据
Cookie cookie = new Cookie("key","value");
②发送Cookie到客户端:使用response对象
response.addCookie(cookie);
①获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies();
②遍历数组,获取每一个Cookie对象:for
使用Cookie对象方法获取数据
cookie.getName();
cookie.getValue();

- package com.learn.web; /**
- * @author 咕咕猫
- * @version 1.0
- */
-
- import javax.servlet.*;
- import javax.servlet.http.*;
- import javax.servlet.annotation.*;
- import java.io.IOException;
-
- @WebServlet("/aServlet")
- public class AServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //发送cookie
-
- //1.创建cookie对象
- Cookie cookie = new Cookie("username","zs");
-
- //2. 发送cookie,response
- response.addCookie(cookie);
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- package com.learn.web; /**
- * @author 咕咕猫
- * @version 1.0
- */
-
- import javax.servlet.*;
- import javax.servlet.http.*;
- import javax.servlet.annotation.*;
- import java.io.IOException;
-
- @WebServlet("/bServlet")
- public class BServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //获取cookie
-
- //1. 获取Cookie数组
- Cookie[] cookies = request.getCookies();
-
- //2.遍历数组
- for (Cookie cookie : cookies) {
- //3. 获取数据
- String name = cookie.getName();
- if ("username".equals(name)) {
- String value = cookie.getValue();
- System.out.println(name + ":" + value);
- break;
- }
- }
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
Cookie的基本使用,包含两部分内容
创建Cookie对象,并设置值:Cookie cookie = new Cookie("key","value");
发送Cookie到客户端使用的是Reponse对象:response.addCookie(cookie);
使用Request对象获取Cookie数组:Cookie[] cookies = request.getCookies();
遍历数组
获取数组中每个Cookie对象的值:cookie.getName()和cookie.getValue()