Day05JavaWeb【Cookie与Session】Cookie 看这篇就够了!***

学习目标

先讲Cookie再讲Session ?
Cookie和Session是基于会话的 Session基于Cookie技术
目标列表
1.能够说出会话的概念
2.能够说出cookie的概念
3.能够创建、发送、接收、删除cookie
4.能够说出cookie执行原理
5.能够说出session的概念
6.能够获取session对象、添加、删除、获取session中的数据

会话的介绍

  • (1)什么是会话
    浏览器和服务器之间发生的一系列请求和响应的过程
    会话开始: 打开浏览器-访问京东
    会话结束:关闭浏览器
  • (2)会话产生的数据
    在客户端与服务器端交互的过程中,也会产生一些数据。为了保存会话过程中产生的数据,在Servlet技术中,提供了两个用于保存会话数据的对象,分别是Cookie和Session
  • (3)本质就是在浏览器或者服务器存取数据的技术

Cookie的概述

  • (1)什么是Cookie
    Cookie技术就是在浏览器端存取会话的数据
  • (2)Cookie有什么特点?
    数据是key-value的形式 name=jack
    数据有存活时间,并且可以修改
    不能识别一些特殊符号,所以需要对这个符号进行转码
1)Cookie的创建
Cookie(String name, String value) 创建cookie对象
String getName()获取cookie的名称
String getValue() 获取cookie的值
(2)将cookie发送给浏览器
void addCookie(Cookie cookie)	

src\com\wzx\pack01_set_get\Demo01SetServlet.java

@WebServlet("/set")
public class Demo01SetServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //数据是key-value的形式  age 18
        //创建cookie对象
        Cookie cookie1 = new Cookie("username","jack");
        Cookie cookie2 = new Cookie("password","1234");

        //因为cookie是浏览器保存会话数据的技术 ,所以必须将cookie发给浏览器
        response.addCookie(cookie1);
        response.addCookie(cookie2);
    }
}


Cookie的获取

Cookie[] getCookies() 获取浏览器发送的cookie  
 Cookie[] cookies = request.getCookies();

src\com\wzx\pack01_set_get\Demo02GetServlet.java

@WebServlet("/get")
public class Demo02GetServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取cookie  ,第二次开始访问网站,此时浏览器会自动地将保存的cookie放到请求带到Servlet
        Cookie[] cookies = request.getCookies();
        //循环所有的cookie
        for(Cookie cookie:cookies){
    
    
            System.out.println(cookie.getName()+" "+cookie.getValue());
        }
    }
}

Cookie设置存活时间

void setMaxAge(int expiry) 设置cookie的最大生存时间(单位:秒)
102460*60
(1)默认情况下,浏览器中Cookie的存活时间是一个会话
(2)我们有时候需要设置Cookie的 存活时间
如果你设置了setMaxAge,Cookie就会按存活时间保存在硬盘中
//设置Cookie的存活时间

cookie.setMaxAge(60*60);  //单位是秒,存活时间就是1个小时

src\com\wzx\pack02_life_time\Demo03SetServlet.java

@WebServlet("/set_time")
public class Demo03SetServlet extends HttpServlet {
    
    
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

   }

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
       //数据是key-value的形式  age 18
       //创建cookie对象
       Cookie cookie1 = new Cookie("username","jack");
       cookie1.setMaxAge( 10*24*60*60);//修改cookie的存活时间
       Cookie cookie2 = new Cookie("password","1234");
       cookie2.setMaxAge( 10*24*60*60);
       //因为cookie是浏览器保存会话数据的技术 ,所以必须将cookie发给浏览器
       response.addCookie(cookie1);
       response.addCookie(cookie2);
   }
}

Cookie的访问路径

1void setPath(String uri)	
设置cookie的路径——浏览器根据这个路径判断那些cookie要发送给服务器
  //方式1:/myweb/      当访问项目下的所有资源,请求都会携带Cookie
  //方式2:/myweb/abc   当访问项目下的abc下所有资源,请求都会携带Cookie
  //方式3:/                      当访问服务器中所有资源,请求都会携带Cookie
  //默认方式:/myweb/   当访问项目下的所有资源,请求都会携带Cookie

在这里插入图片描述
src\com\wzx\pack03_setpath\Demo04SetServlet.java

@WebServlet("/set_path")
public class Demo04SetServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //数据是key-value的形式  age 18
        //创建cookie对象
        Cookie cookie1 = new Cookie("username2","jack");
        cookie1.setMaxAge( 10*24*60*60);//修改cookie的存活时间
        Cookie cookie2 = new Cookie("password2","1234");
        cookie2.setMaxAge( 10*24*60*60);

        cookie1.setPath("/taobao");
        cookie2.setPath("/taobao");

        //因为cookie是浏览器保存会话数据的技术 ,所以必须将cookie发给浏览器
        response.addCookie(cookie1);
        response.addCookie(cookie2);
    }
}

清除Cookie

  • (1)没有清除Cookie的方法
  • (2)可以修改存活时间
  • (3)可以使用空值覆盖原值
    1.cookie的生存时间单位为:0秒 cookie1.setMaxAge(0);
    2.要删除已经存在的cookie,后一个用来覆盖cookie必须名称与路径与原来的cookie一致
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

        Cookie cookie1 = new Cookie("username","");
        Cookie cookie2 = new Cookie("password","");

        cookie1.setMaxAge(1000);
        cookie2.setMaxAge(1000);
        //因为cookie是浏览器保存会话数据的技术 ,所以必须将cookie发给浏览器
        response.addCookie(cookie1);
        response.addCookie(cookie2);
    }

Cookie的编码

1)Cookie不能识别一些特殊符号,所以需要对这个符号进行转码:
编码:  URLEncoder.encode(date, "UTF-8")
 解码: URLDecoder.decode(date, "UTF-8")
(2) 有的值cookie不能保存,则先编码再保存

public class TestURLEncoder {
    
    
    //网络编码,post使用的也是这个编码
    @Test
    public void test() throws UnsupportedEncodingException {
    
    
        //中文
        //明文  密文
        String result = URLEncoder.encode("中国","utf-8");//编码 参1 明文 参2 utf-8
        System.out.println(result);
        //key name  value %E4%B8%AD%E5%9B%BD

        //密文  明文
       String result2= URLDecoder.decode("%E4%B8%AD%E5%9B%BD","utf-8");//解码 参1 密文  参2 utf-8
       System.out.println(result2);
    }
}

src\com\wzx\pack05_encoding\Demo09GetServlet.java

@WebServlet("/get_decode")
public class Demo09GetServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

    }

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

        Cookie[] cookies = request.getCookies();//
        if(cookies != null){
    
    
            //循环所有的cookie
            for(Cookie cookie:cookies){
    
    
                System.out.println(cookie.getName()+" "+ URLDecoder.decode(cookie.getValue(),"utf-8"));
            }
        }else{
    
    
            System.out.println("没有查询到cookie");
        }


    }
}

Cookie的执行流程***

  • (1)浏览器第一次访问Servlet,创建一个Cookie对象
  • (2)Servlet将生成的Cookie发送到浏览器( Set-Cookie)
  • (3)浏览器自动保存
  • (4)第二次访问Servlet,浏览器自动将Cookie数据获取(“Cookie”) 再放在请求中
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013621398/article/details/108530457