Cookie

1 Cookie的概念

Cookie是一种客户端的会话技术,它是服务器存放在浏览器的一小份数据,浏览器以后每次访问该服务器的时候都会将这小份数据携带到服务器去。

2 Cookie的作用

1.在浏览器中存放数据

2.将浏览器中存放的数据携带到服务器

3 Cookie的应用场景

1.记住用户名 当我们在用户名的输入框中输入完用户名后,浏览器记录用户名,下一次再访问登录页面时,用户名自动填充到用户名的输入框.

2.自动登录(记住用户名和密码)当用户在淘宝网站登录成功后,浏览器会记录登录成功的用户名和密码,下次再访问该网站时,自动完成登录功能. 以上这些场景都是使用会话cookie实现的,将上次的信息保存到了cookie中,下次直接从cookie中获取数据信息

3.保存网站的上次访问时间,我们访问网站的时候,通常会看到网站上显示上次访问时间,这些信息就是在用户访问网站的时候保存在cookie中的

4.保存电影的播放进度, 在网页上播放电影的时候,如果中途退出浏览器了,下载再打开浏览器播放同一部电影的时候,会自动跳转到上次退出时候的进度,因为在播放的时候会将播放进度保存到cookie中

@WebServlet("/CookieDemo01")
public class CookieDemo01 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("来了一个请求~");


        //1. 创建cookie  cookie的name和value一般不写中文,value的值不要有空格,否则会报错!
        Cookie cookie = new Cookie("address", "shenzhen");
        Cookie cookie2 = new Cookie("phone","10086");


        //2. 给响应设置cookie:把cookie传递给浏览器
        // 设置好cookie之后,实际上返回给浏览器会放到响应头里面去,
        // 如下所示:
        // Set-Cookie: address=shenzhen

        //如果设置了多个cookie,那么响应头里面显示的效果是这样的:
        //Set-Cookie: address=shenzhen
        //Set-Cookie: phone=10086

        resp.addCookie(cookie);
        resp.addCookie(cookie2);

    }
}

  

@WebServlet("/CookieDemo02")
public class CookieDemo02 extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("来了一个请求。。。");

        //得到浏览器带过来的所有的cookie,是一个cookie[]
        //req.getCookies()


        //1. 获取所有的cookie
        // 如果浏览器有带过来cookie 那么这个方法能够获取到cookie
        // 如果浏览器没有带过来cookie ,那么这个方法会返回null ,所以后续的操作要进行判空操作。
        Cookie[] cookies = req.getCookies();

        //cookie是在请求头里面的,: Cookie:address=10086;phone=110


        if(cookies != null){
            //2. 遍历数组 遍历得到每一个cookie,然后获取cookie的name 和  value
            // 因为cookie是键值对的形式,形如: address=shenzhen
            for(Cookie c : cookies){
                //Cookie: address=10086
                System.out.println(c.getName() + "=" + c.getValue());
            }
        }
    }
}

 Cookie本质是请求头,响应头 

1cookie特点

1.是由服务器产生的,然后发送给客户端,由浏览器保存在本地

2.下一次浏览器再访问服务器的时候,浏览器会自动的带上cookie

3.cookie能够存放的数据长度有限,一般不存中文,也不要有空格。

1new Cookie(String name,String value); 创建Cookie

1cookie相关API

1.new Cookie(String name,String value); 创建Cookie

2.response.addCookie(cookie); 把Cookie写给浏览器

3.request.getCookies(); 获得所有的Cookie对象

4.cookie.getName() 获得Cookie的key

5.cookie.getValue() 获得Cookie的value

6.如果cookie的name是一样的,那么后面的值会覆盖前面的值。

/*
 *  @描述:    cookie的工具类
 *          根据cookie的名字,获取指定的cookie对象。
 *          1. 定义一个方法,静态方法(一般是静态方法)
 *          2. 有两个参数: 想获取什么cookie的名字, 整个cookie的数组
 *          3. 方法要返回一个cookie对象,也即是根据名字找到的那个cookie(键值对)的对象
 */
public class CookieUtil {


    /**
     * 从整个所有的cookie数组里面,获取指定的cookie
     * @param name  如:address
     * @param cookies 如:  address=shenzhen;phone=10086
     * @return
     */
    public static Cookie getCookie(String name , Cookie [] cookies){
        if(cookies != null){
            //遍历每一个cookie
            for(Cookie c : cookies){
                //根据每一个cookie的名字来判断是不是我们想要得到的那个cookie.
                if(c.getName() .equals(name)){
                    return c;
                }
            }
        }
        //如果cookies 数组是空,那么就返回null, 表示找不到cookie
        return null;
    }




}

  

/*
 *  @描述:    根据工具类来获取cookie
 */
@WebServlet("/CookieDemo03")
public class CookieDemo03  extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        //1. 获取所有的cookies
        Cookie[] cookies = req.getCookies();

        //2. 使用工具类 得到指定的cookie对象
        Cookie cookie = CookieUtil.getCookie("address", cookies);

        //3. 即可打印值
        System.out.println(cookie.getName() + "=" + cookie.getValue());
    }
}

  

/*
 *  @描述:    cookie的分类:
 *              临时性cookie
 *                     a. 关闭浏览器之后,就消失了。
 *                      b. 默认的写法就是临时性的cookie
 *
 *              持久性 cookie
 *                      cookie2.setMaxAge(60 * 60 * 24 * 7); //单位是秒  ,这里设置成7天
 */
@WebServlet("/CookieDemo04")
public class CookieDemo04 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("CookieDemo04::来了一个请求~~");
        //==========================下面的cookie是临时性的cookie==============================

        //1. 创建cookie
        Cookie cookie = new Cookie("username","admin");

        //2. 返回cookie
        resp.addCookie(cookie);

        //==========================下面的cookie是持久性的cookie==============================

        //3. 创建cookie
        Cookie cookie2 = new Cookie("password" , "123456");

        //4. 把cookie设置成持久性的cookie
        cookie2.setMaxAge(60 * 60 * 24 * 7); //单位是秒  ,这里设置成7天

        //5. 把持久性的cookie返回给浏览器
        resp.addCookie(cookie2);
    }
}

  

 

Cookie

上一篇:hadoop 3.1.1 Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster


下一篇:启动之后打开页面报错 Warning: Please use `require("history").createHashHistor