目录

一、Cookie

二、创建 Cookie

 三、服务器获取 Cookie

四、修改Cookie值

1、方案一

2、方案二

 五、浏览器查看 Cookie

1、谷歌浏览器查看 Cookie:

 2、火狐浏览器查看 Cookie:

六、Cookie 生命控制

七、Cookie的path属性

一、Cookie

1、Cookie 是服务器通知客户端保存键值对的一种技术。

2、客户端有了 Cookie 后,每次请求都发送给服务器。

3、每个 Cookie 的大小不能超过 4kb

二、创建 Cookie

cookie java 获取respon cookie javaweb_Cookie

protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、创建cookie对象
        Cookie cookie = new Cookie("key1","value1");
        //2、通知客户端保存cookie
        resp.addCookie(cookie);
        resp.getWriter().write("Cookie创建成功");
    }

 三、服务器获取 Cookie

服务器获取客户端的 Cookie :req.getCookies():Cookie[]

cookie java 获取respon cookie javaweb_Cookie_02

 

cookie java 获取respon cookie javaweb_Cookie_03

protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for(Cookie cookie:cookies){
            // getName 方法返回Cookie的key值
            // getValue 方法返回Cookie的value值
            resp.getWriter().write("Cookie["+cookie.getName()+"="+cookie.getValue()+"]<br/>");

        }
        // 查找key1的cookie值
        Cookie iWantCookie = CookieUtils.findCookie("key1",cookies);
        //如果不等于null,说明找到了需要的cookie
        if (iWantCookie != null) {
            resp.getWriter().write("get到key1的cookie");
        }
    }

四、修改Cookie值

1、方案一

     (1)创建一个需要修改的同名的Cookie对象

     (2)在构造器中,同时赋予新的Cookie值

     (3)调用response.addCookie(Cookie)通知客户端保存修改

2、方案二

     (1)查找到需要修改的Cookie对象

     (2)调用setCookie()方法赋予新的Cookie值

     (3)调用response.addCookie(Cookie)通知客户端保存修改

protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //方案一
        //1、创建一个需要修改的同名的Cookie对象
        //2、在构造器中,同时赋予新的Cookie值
        Cookie cookie = new Cookie("key1","newValue1");
        //3、调用response.addCookie(Cookie)
        resp.addCookie(cookie);
        resp.getWriter().write("方案一、key1的cookie值修改成功!<br/>");

        //方案二
        //1、查找到需要修改的Cookie对象
        Cookie cookie1 = CookieUtils.findCookie("key1",req.getCookies());
        if(cookie1 != null){
            //2、调用setCookie()方法赋予新的Cookie值
            cookie1.setValue("renewvalue1");
            //3、调用response.addCookie(Cookie)通知客户端保存修改
            resp.addCookie(cookie1);
            resp.getWriter().write("方案二、key1的cookie值修改成功!");
        }
    }

 五、浏览器查看 Cookie

1、谷歌浏览器查看 Cookie:

cookie java 获取respon cookie javaweb_服务器_04

 2、火狐浏览器查看 Cookie:

cookie java 获取respon cookie javaweb_服务器_05

六、Cookie 生命控制

Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)

setMaxAge()(设置cookie的最大生存时间,以秒为单位)

正值,表示在指定的秒数后过期,

负数,表示浏览器一关,Cookie 就会被删除  (默认值是-1)

零,表示马上删除 Cookie

protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("defalutLife","defalutLife");
        //设置存活时间
        cookie.setMaxAge(-1);
        resp.addCookie(cookie);
    }
    protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //先找到需要删除的Cookie对象
        Cookie cookie = CookieUtils.findCookie("defalutLife",req.getCookies());
        if(cookie!=null){
            //调用setMaxAge(0)
            cookie.setMaxAge(0);  // 0表示马上删除,不需要等待浏览器关闭
            //调用response.addCookie(Cookie)
            resp.addCookie(cookie);
            resp.getWriter().write("defalutLife成功被删除");
        }
    }
    protected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("life3600","life3600");
        cookie.setMaxAge(60*60);  //设置Cookie一小时之后被删除
        resp.addCookie(cookie);
        resp.getWriter().write("成功创建一个一小时的cookie");
    }

 七、Cookie的path属性

Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器,哪些不发。

path 属性是通过请求的地址来进行有效的过滤。

CookieA    path=/工程路径

CookieB    path=/工程路径/abc

请求地址如下:

http://ip:port/工程路径/a.html   CookieA 发送 CookieB 不发送

http://ip:port/工程路径/abc/a.html    CookieA 发送 CookieB 发送

protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("path1", "path1");
        // getContextPath() ===>>>> 得到工程路径
        cookie.setPath( req.getContextPath() + "/abc" ); // ===>>>> /工程路径/abc
        resp.addCookie(cookie);
        resp.getWriter().write("创建了一个带有 Path 路径的 Cookie");
    }