Cookie

    xiaoxiao2025-04-25  36

    Cookie

     

    会话技术简介

    1. 会话:一次会话中包含多次请求和响应。

        一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止

    2. 功能:在一次会话的范围内的多次请求间,共享数据

    3. 方式:

            1. 客户端会话技术:Cookie

           2. 服务器端会话技术:Session

    -----------------------------------------------------------------------------------

    【1】概念:客户端会话技术,将数据保存到客户端

    【2】使用步骤:

    1) 创建Cookie对象,绑定数据

        new Cookie(String name, String value)

    2)发送Cookie对象

         response.addCookie(Cookie cookie)

    3)获取Cookie,拿到数据

         Cookie[]  request.getCookies() 

    【3】实现原理

    基于响应头set-cookie和请求头cookie实现

    共享数据

    第一次浏览器向服务器请求cookie资源,服务器便响应发送响应头set-cookie:键值对,浏览器获取数据保存在本地,第二次浏览器向服务器发送请求头cookie:键值对,服务器获取cookie数据

    @WebServlet("/CookieDemo1")

    public class CookieDemo1 extends HttpServlet {

        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            //1.创建Cookie对象

            Cookie c = new Cookie("msg","hello");

            //2.发送Cookie

            response.addCookie(c);

        }

        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            this.doPost(request, response);

        }

    }

    @WebServlet("/CookieDemo2")

    public class CookieDemo2 extends HttpServlet {

        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

           //3. 获取Cookie

            Cookie[] cs = request.getCookies();

            //获取数据,遍历Cookies

            if(cs != null){

                for (Cookie c : cs) {

                    String name = c.getName();

                    String value = c.getValue();

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

                }

            }

        }

     

        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            this.doPost(request, response);

        }

    }

    【4】 cookie的细节

    1)一次可以发送多个cookie

    可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。

    2) cookie在浏览器中存活的时间

        1. 默认情况下,当浏览器关闭后,Cookie数据被销毁

        2. 持久化存储:etMaxAge(int seconds)

                【1】 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效

                【2】负数:默认值

                【3】 零:删除cookie信息

    @WebServlet("/cookieDemo4")

    public class CookieDemo4 extends HttpServlet {

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            //1.创建Cookie对象

            Cookie c1 = new Cookie("msg","setMaxAge");

            //2.设置cookie的存活时间

            //c1.setMaxAge(30);//将cookie持久化到硬盘,30秒后会自动删除cookie文件

            //c1.setMaxAge(-1);

            c1.setMaxAge(0);//删除Cookie

            //3.发送Cookie

            response.addCookie(c1);

        }

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            this.doPost(request, response);

        }

    }

    3) cookie存储中文问题

    【1】在tomcat 8 之前 cookie中不能直接存储中文数据。

    【2】需要将中文数据转码---一般采用URL编码(

    转载请注明原文地址: https://yun.8miu.com/read-137500.html
    最新回复(0)