Cookie的创建发送获取、存活时间、存中文、重名和路径问题

Cookie的创建发送获取、存活时间、存中文、重名和路径问题

1.类:javax.servlet.http.Cookie

2.Cookie 的创建和发送

        //创建Cookie对象
        Cookie cookie = new Cookie("name","admit");
        //发送Cookie对象
        response.addCookie(cookie);    

3.Cookie的获取

        //返回的是Cookie数组
        Cookie[] cookies = request.getCookies();
        //判断Cookie是否为空
        if(cookies != null && cookies.length>0 ){
            for (Cookie cookie:cookies) {
                //获取Cookie的名称和值
                String name = cookie.getName();
                String value= cookie.getValue();
                System.out.println("name:"+name);
                System.out.println("value:"+value);
            }
        }

4.Cookie 设置到期时间

取值:

  • 负整数:表示不存储该cookie,cookie的maxAge属性的默认值是-1,表示只在浏览器内存中存活,一旦关闭浏览器那么cookie就会消失。
  • 正整数:表示存储的秒数,浏览器会把Cookie保存在硬盘上,就算关闭浏览器或者重启客户端电脑,cookie也会存活相应的时间。
  • 0:表示删除了该cookie,无论是浏览器内存还是客户端硬盘,都会删除这个cookie,如果原本存在的值,通过cookie.setMaxAge(0)可以将它删除

格式:

如:cookie.setMaxAge(-1);

问题:之前的值在浏览器中还是会显示出来

可能是因为默认值是-1,表示在浏览器存活,所以每次启动的时候,这个值就还是会出现。也能被获取出来进行打印。

5.Cookie存中文问题:

Cookie中不可以出现中文,需要用 URLEncoder.encode() 来进行编码,不然会报错,然后使用的时候通过URLDecoder.decode()来解码。

注意:不太建议存中文

例子:

        String name = "姓名:";
        String value = "张三";
        //通过URLEncode编码
        name = URLEncoder.encode(name);
        value = URLEncoder.encode(value);
        Cookie cookie = new Cookie(name,value);
        response.addCookie(cookie);
        //通过URLDecoder解码
        Cookie[] cookies = request.getCookies();
        //遍历
        if(cookies!=null&&cookies.length>0){
            for (Cookie cook:cookies) {
                System.out.println(URLDecoder.decode(name));
                System.out.println(URLDecoder.decode(value));
            }
        }

 

 

 

 

 6.Cookie同名问题:

后面的cookie会将前面的cookie覆盖掉,只要是同name的就会覆盖掉

注意:cookie的存储是有上限的

 

 7.Cookie路径问题:

1)当前服务器下任何项目的任意资源都可以获取Cookie对象

cookie.setPath("/");

2)当前项目资源课获取Cookie对象(默认的)

指不指定都可以,指定的话需要指定当前站点名

cookie.setPath("/sr01");

3)指定项目下的资源可以获取Cookie对象

通过指定站点名

cookie.setPath("/sr02");

4)指定目录下的资源可以获取Cookie对象

例如:

cookie.setPath("/sr02/ser02");

指的是只有sr02该站点名下的ser02可以获取cookie对象,别的都拿不到

posted on 2022-10-11 19:39  201812  阅读(191)  评论(0编辑  收藏  举报