乐趣区

我来教你-Cookie对象的创建乐字节

Cookie 对象

​ Cookie 是浏览器提供的一种技术,通过服务器的程序能将一些只须保留在客户端,或者在客户端进行解决的数据,放在本地的计算机上,不须要通过网络传输,因此进步网页解决的效率,并且可能缩小服务器的负载,然而因为 Cookie 是服务器端保留在客户端的信息,所以其安全性也是很差的。例如常见的记住明码则能够通过 Cookie 来实现。

​ 有一个专门操作 Cookie 的类 javax.servlet.http.Cookie。随着服务器端的响应发送给客户端,保留在浏览器。当下次再拜访服务器时把 Cookie 再带回服务器。

​ Cookie 的格局:键值对用“=”链接,多个键值对间通过“;”隔开。

Cookie 的创立和发送

​ 通过 new Cookie(“key”,”value”); 来创立一个 Cookie 对象,要想将 Cookie 随响应发送到客户端,须要先增加到 response 对象中,response.addCookie(cookie); 此时该 cookie 对象则随着响应发送至了客户端。在浏览器上能够看见。

// 创立 Cookie 对象
Cookie cookie = new Cookie("uname","zhangsan");
// 发送 Cookie 对象
response.addCookie(cookie);

F12 查看

Cookie 的获取

​ 在服务器端只提供了一个 getCookies()的办法用来获取客户端回传的所有 cookie 组成的一个数组,如果须要获取单个 cookie 则须要通过遍历,getName()获取 Cookie 的名称,getValue()获取 Cookie 的值。

// 获取 Cookie 数组
Cookie[] cookies = request.getCookies();
// 判断数组是否为空
if (cookies != null && cookies.length > 0) {
    // 遍历 Cookie 数组
    for (Cookie cookie : cookies){System.out.println(cookie.getName());
        System.out.println(cookie.getValue());
    }
}

Cookie 设置到期工夫

​ 除了 Cookie 的名称和内容外,咱们还须要关怀一个信息,到期工夫,到期工夫用来指定该 cookie 何时生效。默认为以后浏览器敞开即生效。咱们能够手动设定 cookie 的无效工夫(通过到期工夫计算),通过 setMaxAge(int time); 办法设定 cookie 的最大无效工夫,以秒为单位。

到期工夫的取值

  • 负整数

    若为正数,示意不存储该 cookie。

    cookie 的 maxAge 属性的默认值就是 -1,示意只在浏览器内存中存活,一旦敞开浏览器窗口,那么 cookie 就会隐没。

  • 正整数

    若大于 0 的整数,示意存储的秒数。

    示意 cookie 对象可存活指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保留到硬盘上,就算敞开浏览器,就算重启客户端电脑,cookie 也会存活相应的工夫。

  • 若为 0,示意删除该 cookie。

    cookie 生命等于 0 是一个非凡的值,它示意 cookie 被作废!也就是说,如果原来浏览器曾经保留了这个 Cookie,那么能够通过 Cookie 的 setMaxAge(0)来删除这个 Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie。

设置 Cookie 对象指定工夫后生效

// 创立 Cookie 对象
Cookie cookie = new Cookie("uname","zhangsan");
// 设置 Cookie 3 天后生效
cookie.setMaxAge(3 * 24 * 60 * 60);
// 发送 Cookie 对象
response.addCookie(cookie);

Cookie 的留神点

  1. Cookie 保留在以后浏览器中。

    在个别的站点中经常有记住用户名这样一个操作,该操作只是将信息保留在本机上,换电脑当前这些信息就有效了。而且 cookie 还不能跨浏览器。

  2. Cookie 存中文问题

    Cookie 中不能呈现中文,如果有中文则通过 URLEncoder.encode()来进行编码,获取时通过 URLDecoder.decode()来进行解码。

    String name = "姓名";
    String value = "张三";
    // 通过 URLEncoder.encode()来进行编码
    name = URLEncoder.encode(name);
    value = URLEncoder.encode(value);
    // 创立 Cookie 对象
    Cookie cookie = new Cookie(name,value);
    // 发送 Cookie 对象
    response.addCookie(cookie);
    // 获取时通过 URLDecoder.decode()来进行解码
    URLDecoder.decode(cookie.getName());
    URLDecoder.decode(cookie.getValue());
  3. 同名 Cookie 问题

    如果服务器端发送反复的 Cookie 那么会笼罩原有的 Cookie。

  4. 浏览器寄存 Cookie 的数量

    不同的浏览器对 Cookie 也有限定,Cookie 的存储有是下限的。Cookie 是存储在客户端(浏览器)的,而且个别是由服务器端创立和设定。前期联合 Session 来实现回话跟踪。

Cookie 的门路

​ Cookie 的 setPath 设置 cookie 的门路,这个门路间接决定服务器的申请是否会从浏览器中加载某些 cookie。

情景一:以后服务器下任何我的项目的任意资源都可获取 Cookie 对象

/* 以后我的项目门路为:s01 */
Cookie cookie = new Cookie("xxx","XXX");
// 设置门路为 "/",示意在以后服务器下任何我的项目都可拜访到 Cookie 对象
cookie.setPath("/");
response.addCookie(cookie);

情景二:以后我的项目下的资源可获取 Cookie 对象(默认不设置 Cookie 的 path)

/* 以后我的项目门路为:s01 */
Cookie cookie = new Cookie("xxx","XXX");
// 设置门路为 "/s01",示意在以后我的项目下任何我的项目都可拜访到 Cookie 对象
cookie.setPath("/s01"); // 默认状况,可不设置 path 的值
response.addCookie(cookie);

情景三:指定我的项目下的资源可获取 Cookie 对象

/* 以后我的项目门路为:s01 */
Cookie cookie = new Cookie("xxx","XXX");
// 设置门路为 "/s02",示意在 s02 我的项目下才可拜访到 Cookie 对象
cookie.setPath("/s02"); // 只能在 s02 我的项目下获取 Cookie,就算 cookie 是 s01 产生的,s01 也不能获取它
response.addCookie(cookie);

情景四:指定目录下的资源可获取 Cookie 对象

/* 以后我的项目门路为:s01 */
Cookie cookie = new Cookie("xxx","XXX");
// 设置门路为 "/s01/cook",示意在 s02/cook 目录下才可拜访到 Cookie 对象
cookie.setPath("/s01/cook"); 
response.addCookie(cookie);

​ 如果咱们设置 path,如果以后拜访的门路蕴含了 cookie 的门路(以后拜访门路在 cookie 门路根底上要比 cookie 的范畴小)cookie 就会加载到 request 对象之中。

​ cookie 的门路指的是能够拜访该 cookie 的顶层目录,该门路的子门路也能够拜访该 cookie。

​ <font color=”red”>总结:当拜访的门路蕴含了 cookie 的门路时,则该申请将带上该 cookie;如果拜访门路不蕴含 cookie 门路,则该申请不会携带该 cookie。</font>

加 VX 理解点我扫码支付
学习更多常识,请退出企鹅群:1080355292,入群暗号(33)

退出移动版