Cookie客户端会话技术

1. Cookie基本使用

在这里插入图片描述

过程:
当浏览器发出请求1给服务器端A时,A Servlet就会创建一个cookie对象数据,A在做响应时,就会发送给浏览器,浏览器就把cookie保存在内存之中;
当浏览器在同一次会话中,再次发送请求时,就会携带cookie访问B Servlet,而B就可以访问到cookie中的数据。

Cookie客户端会话技术_第1张图片
Cookie客户端会话技术_第2张图片

1.1 发送cookie

Cookie客户端会话技术_第3张图片

创建AServlet

@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);
    }
}

启动服务器在谷歌中查询cookie

在这里插入图片描述

1.2 获取cookie

Cookie客户端会话技术_第4张图片

创建BServlet

@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();
                //URL解码
                value = URLDecoder.decode(value,"UTF-8");
                
                System.out.println(name+":"+value);

                break;
            }
        }

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

访问AServlet之后,继续访问BServlet,控制台输出

在这里插入图片描述

2. cookie原理及细节

2.1 cookie原理

Cookie客户端会话技术_第5张图片

发送cookie,Tomcat服务器是基于HTTP协议的,放的是HTTP的响应数据,当服务器发现是发送cookie数据时,Tomcat就在响应数据中加了一个响应头set-cookie,然后浏览器接收并解析,获取数据存储至内存。
当浏览器同一会话中再次访问时,携带cookie访问BServlet,浏览器会自动加请求头cookie,然后BServlet获取请求头数据,然后通过request对象,把所有的数据获取出来。

在这里插入图片描述
在这里插入图片描述
Cookie客户端会话技术_第6张图片
在这里插入图片描述

2.2 cookie细节

2.2.1 cookie的存活时间

Cookie客户端会话技术_第7张图片

@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");
        
        //设置存活时间   ,1周 7天
        cookie.setMaxAge(60*60*24*7);

        //2. 发送Cookie,response
        response.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
2.2.2 cookie存储中文

cookie中不能直接使用中文,需要进行URL编码再解码

Cookie客户端会话技术_第8张图片

@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //发送Cookie
        
        String value = "张三";
        //URL编码
        value = URLEncoder.encode(value, "UTF-8");
        System.out.println("存储数据:"+value);
		//1. 创建Cookie对象
        Cookie cookie = new Cookie("username",value);

        //设置存活时间   ,1周 7天
        cookie.setMaxAge(60*60*24*7);

        //2. 发送Cookie,response
        response.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
@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();
                //URL解码
                value = URLDecoder.decode(value,"UTF-8");

                System.out.println(name+":"+value);

                break;
            }
        }

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

先进行URL编码,这里还设置cookie的存活时间为一周

在这里插入图片描述
在这里插入图片描述

URL解码

在这里插入图片描述

在这里插入图片描述

你可能感兴趣的:(Java,Web,servlet,java,服务器)