zoukankan      html  css  js  c++  java
  • 2020Cookie学习笔记

    package com.demo.test;


    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;

    public class CookieServlet extends HttpServlet {
    //cookie不支持使用中文,要使用必须先做base64编码

    //创建cookie方法
    protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 解决响应中乱码问题
    resp.setContentType("text/html;charset=UTF-8");
    // 创建一个新的cookie
    // 1、创建Cookie对象,服务器保存了Cookie信息
    Cookie cookie = new Cookie("key1", "value1");
    // 通知客户端保存Cookie resp.addCookie(cookie);不能省
    resp.addCookie(cookie);
    // 浏览器收到响应后,发现有set-cookie响应头,查找是否自身含有这个cookie信息,如果没有就储存一下,有就修改。

    Cookie cookie01 = new Cookie("key2", "value2");
    // 通知客户端保存Cookie resp.addCookie(cookie);不能省
    resp.addCookie(cookie01);
    // 浏览器收到响应后,发现有set-cookie响应头,查找是否自身含有这个cookie信息,如果没有就储存一下,有就修改。

    resp.getWriter().write("Cookie创建成功!");
    }

    // 获取cookie方法
    protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 通过getCookies方法获取,反复一个cookie数组;
    Cookie[] cookies = req.getCookies();

    //
    Cookie iWantCookie = new CookieUtils().findCookie("key1", cookies);

    /* 如果cookie不等于null,就是找到了需要的cookie */
    if (null != iWantCookie) {
    resp.getWriter().write(iWantCookie.getName() + "=" + iWantCookie.getValue());
    }
    }

    protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) {
    // 改变一个cookie的值
    /*
    * 方法一、1
    * 1、先创建一个要修改的同名的cookie对像
    * 2、在构造器,同时赋予新的Cookie值
    * 3、调用response.addCookie(cookie);
    * */
    /*Cookie cookie = new Cookie("key1", "key1Value");
    resp.addCookie(cookie);
    CookieServlet cookieServlet = new CookieServlet();
    try {
    cookieServlet.getCookie(req, resp);
    } catch (ServletException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }*/
    // 方法二:
    /**
    * 1、先查找到需要修改的Cookie对象
    * 2、调用setValue()方法赋予新的Cookie值
    * 3、调用response.addCookie()通知客户端保存修改
    */
    Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
    if (cookie != null) {
    cookie.setValue("key2Value2");
    resp.addCookie(cookie);
    }
    }

    /**
    * cookie的生存控制指的是如何管理Cookie什么时候被销毁(删除)
    * setMaxAge() 正值表示cookie将会在该值所表示的秒数(整数)之后过期,注意该值时cookie的最大生存时间,不是cookie当前的生存时间
    * 负值意味着,cookie不会持久储存,将在web浏览器退出时删除,0值会导致删除Cookie(立即)
    */
    protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) {
    Cookie cookie = new Cookie("default", "defaultValue");
    cookie.setMaxAge(-1);//设置存活时间
    resp.addCookie(cookie);
    }

    protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) {
    // 先找到要删除的cookie对象
    // 设置cookie的setMaxAge为零,立即删除cookie,调用setMaxAge(0);
    // 调用response.addCookie(cookie)
    resp.setContentType("text/html;charset=UTF-8");
    Cookie[] cookies = req.getCookies();
    Cookie cookie = CookieUtils.findCookie("key2", cookies);
    if (cookie != null) {
    cookie.setMaxAge(0);
    resp.addCookie(cookie);
    try {
    resp.getWriter().write("key2已删除");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

    protected void life3600(HttpServletRequest req, HttpServletResponse resp) {
    // 设置cookie存活一个小时
    Cookie cookie = new Cookie("life3600", "value3600");
    cookie.setMaxAge(60 * 60);//设置时间为60*60秒
    resp.addCookie(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) {
    resp.setContentType("text/html;charset=UTF-8");
    Cookie cookie = new Cookie("testPath", "pathValue");
    cookie.setPath( req.getContextPath()+"/abc"); //=====>>>> /工程路径/abc,该cookie必须在有abc路径是才会创建
    resp.addCookie(cookie);
    try {
    resp.getWriter().write("创建了一个带有path路径的Cookie");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    }
    这里还是用了一个cookie查找类
    package com.demo.test;

    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;

    public class CookieUtils {
    /**
    *查找指定名称的Cookie对象
    * @param name 指定cookie的name
    * @param cookies 传入客户端cookie数组
    * @return 返回查找到的cookie
    */
    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;
    }
    }


  • 相关阅读:
    Linux常用命令
    全文搜索服务器solr
    非关系型数据库之redis
    springMVC流程
    浅谈spring框架的控制反转和依赖注入
    Java基础之数组
    Java基础之方法
    跨域访问接口,传递参数
    Centos 6无法使用yum
    内网穿透工具:钉钉HTTP内网穿透使用与讲解
  • 原文地址:https://www.cnblogs.com/youlingdada-top/p/13671001.html
Copyright © 2011-2022 走看看