Cookie笔记,服务器通知客服端保存键值对

目录

 

什么是Cookie?

Cookie的值

创建Cookie

获取Cookie

修改Cookie

谷歌浏览器查看Cookie

Cookie生命控制(删除)

Cookie的path属性

免用户名登陆


  1. 什么是Cookie?

    1. Cookie直译是饼干的意思

    2. Cookie是服务器通知客户端保存键值对的一种技术。是servlet发送到Web浏览器的少量信息。

    3. 客户端有了Cookie后,每次请求都会发送给服务器

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

  2. Cookie的值

    1. 值的内容不能包括:空格、方括号、圆括号、等号、逗号、双引号、斜杠、问号、@、冒号、分号

    2. 值能否为空格,需要根据浏览器的来判断

    3. 如果需要使用这些字符,则需要使用BASE64编码

  3. 创建Cookie

  1.  

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

    // 1、创建Cookie对象
    Cookie cookie2 = new Cookie("key2", "value2");
    // 2、通知客户端保存Cookie
    resp.addCookie(cookie2);

    // 在屏幕上输出提示
    resp.getWriter().write("Cookie创建成功");
}
  1. 获取Cookie

    1. 代码

      1. 获取Cookie的代码

// 获取Cookie
    protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取全部的Cookie,存储在一个数组里
        Cookie[] cookies = req.getCookies();

        // 创建一个Cookie对象,用来存储找到的指定key的Cookie
        Cookie iWantCookie = null;

//        // 遍历数组,取出每一个Cookie打印出来
//        // 需要查找某个Cookie,需要通过遍历来查找(没有封装方法,可以自己封装)
//        for (Cookie cookie : cookies) {
//            // 打印每一个Cookie
//            // getName()方法:返回Cookie的key(名); getValue()方法:返回Cookie的value(值)
//            resp.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "] <br>");
//
//            // 所指定的key为key2
//            if ("key2".equals(cookie.getName())) {
//                iWantCookie = cookie;
//                // break;//单纯找某个key的Cookie,则找到之后可以跳出循环
//            }
//        }

        // 使用封装的方法来取出指定key的Cookie
        iWantCookie = CookieUtils.findCookie("key2", cookies);

        // 如果iWantCookie不为null,说明找到了该Cookie,为null则没有找到
        if (iWantCookie != null) {
            resp.getWriter().write("<br> 找到了需要找的Cookie");
        }
    }

  1. 封装获取指定key的Cookie的代码

public class CookieUtils {
    /**
     * 查找指定名称的Cookie对象
     * @param name
     * @param cookies
     * @return
     */
    public static Cookie findCookie(String name, Cookie[] cookies) {
        if (name == null || cookies == null || cookies.length == 0) {
            return null;
        }

        for (Cookie cookie : cookies) {
            if (name.equals(cookie.getName())) {
                return cookie;
            }
        }
        return null;
    }
}
  1. 修改Cookie

    1. 方案一:覆盖法

      1. 先创建一个要修改的同名Cookie对象

      2. 在构造器中同时赋予新的Cookie值

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

    2. 方案二:直接修改法

      1. 先查找到需要修改的Cookie对象

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

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

// 修改Cookie
    protected void updataCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        // 方案一:覆盖法
//        // 1、先创建一个要修改的同名Cookie对象;2、在构造器中同时赋予新的Cookie值
//        Cookie cookie = new Cookie("key1", "newValue1");
//        // 3、调用response.addCookie(Cookie);通知客户端保存修改
//        resp.addCookie(cookie);

        // 方案二:直接修改法
        // 1、先查找到需要修改的Cookie对象.findCookie()是自己封装的方法
        Cookie cookie1 = CookieUtils.findCookie("key1", req.getCookies());
        if (cookie1 != null) {
            // 2、调用setValue()方法赋予新的Cookie值
            cookie1.setValue("newValue1");

            // 3、调用response.addCookie(Cookie)通知客户端保存
            resp.addCookie(cookie1);
        }

        resp.getWriter().write("key1的Cookie已经修改!");
    }
  1. 谷歌浏览器查看Cookie

    1. 按F12

  1. Cookie生命控制(删除)

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

    2. setMaxAge()方法设置生命周期

      1. 默认值是-1

      2. setMaxAge(正值):表示在指定的秒数之后过期

      3. setMaxAge(负值):表示浏览器一关,Cookie就会被删除

      4. setMaxAge(0):表示马上删除Cookie

    3. 代码展示

      1. 设置Cookie在浏览器关闭时删除

// 设置Cookie在浏览器关闭时删除
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 创建一个Cookie对象
    Cookie cookie = new Cookie("defaultLife", "defaultLife");
    // 设置该Cookie的存活时间
    cookie.setMaxAge(-1);// 设置存活时间:负值,浏览器关闭时删除
    // 通知客户端保存该Cookie
    resp.addCookie(cookie);
}
  1. 删除某个Cookie

// 删除某个Cookie
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 1、先找到要删除的Cookie对象
    Cookie cookie = CookieUtils.findCookie("key1", req.getCookies());
    if (cookie != null) {
        // 2、调用setMaxAge()方法修改存活时间
        cookie.setMaxAge(0);// 参数为0,表示立即删除该Cookie对象
        // 3、调用response.addCookie(Cookie)通知客户端保存
        resp.addCookie(cookie);

        resp.getWriter().write("key1的Cookie已经被删除");
    }
}
  1. 设置Cookie存活一小时

// 设置Cookie存活一小时
protected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Cookie cookie = new Cookie("life3600", "life3600");
    cookie.setMaxAge(60 * 60);
    resp.addCookie(cookie);
    
    resp.getWriter().write("已经创建了一个存活一小时的Cookie");
}
  1. Cookie的path属性

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

    2. path通过请求的地址来进行有效的过滤

    3. 默认的path是当前的路径

    4. 举例:

      1. CookieA path=/工程路径

      2. CookieB path=/工程路径/abc

      3. 请求地址1:http://ip:port/工程路径/a.html

        1. CookieA 发送

        2. CookieB 不发送

      4. 请求路径2:http://ip:port/工程路径/abc/a.html

        1. CookieA 发送

        2. CookieB 发送

// 设置Cookie的path
protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Cookie cookie = new Cookie("path1", "path1");
    // 设置path
    // getContextPath()方法可以工程路径
    cookie.setPath(req.getContextPath() + "/abc");// ---> /工程路径/abc
    resp.addCookie(cookie);

    resp.getWriter().write("创建了一个带有Path路径的Cookie");
}
  1. 免用户名登陆

  1.  

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        if ("wzg168".equals(username) && "123456".equals(password)) {
            // 账号密码正确,登陆
            Cookie cookie = new Cookie("username", username);
            cookie.setMaxAge(60 * 60 * 24 * 7);// Cookie存活一周
            resp.addCookie(cookie);

            System.out.println("登陆成功!");
        } else {
            System.out.println("登陆失败!");
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值