package com.demo.cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "CookieDemo2", value = "/CookieDemo2")
public class CookieDemo2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1、创建 cookie 对象,存储会话数据
Cookie cookie1 = new Cookie("name", "Lucy");
Cookie cookie2 = new Cookie("age", "22");
// 2、设置 cookie 的有效路径。
// 有效路径指的是 cookie 的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时
// 就会带着 cookie 信息,否则不带 cookie 信息。
cookie1.setPath("/03_Cookie");
cookie2.setPath("/test");
// 3、设置 cookie 的有效时间。
// 默认情况下创建的 cookie 是一个会话级别的 cookie,即存储在浏览器内存中,浏览器关闭,cookie 消失。
// 正整数:表示将 cookie 保存到浏览器的缓存目录(硬盘)中,数值表示保存的时间;
// 负整数:表示将 cookie 保存到浏览器的内存中,浏览器关闭 cookie 就会销毁;
// 0:表示删除同名的 cookie;
cookie1.setMaxAge(20); // 设置 cookie 的有效时间为 20秒,cookie 保存在硬盘中,20秒之后 cookie 销毁;
// cookie1.setMaxAge(-1); // 设置 cookie 的有效时间为 负数(不管负值是多少都一样),
// 将 cookie 保存到浏览器内存中,浏览器关闭 cookie 销毁(称为会话 cookie)
// cookie1.setMaxAge(0); // 删除同名的 cookie(注意:删除 cookie 时,有效路径必须一致,否则不会删除)
// 4、发送 cookie 到浏览器。
// 注意:如果存在同名的 cookie 数据,则不会再次发送 cookie。
// 所以在发送同名 cookie 之前,需要先清除浏览器缓存的 cookie 数据。
response.addCookie(cookie1);
response.addCookie(cookie2);
// 5、接收浏览器发送的 cookie。
// 由于上面 cookie2 设置的有效路径为 /test,所以此处获取不到 cookie2 信息,只能获取到 cookie1。
// 浏览器的请求地址为:http://localhost:8080/03_Cookie/CookieDemo2,所以 /03_Cookie 才是有效路径;
// 如果想获取 cookie2 信息,浏览器需要输入:http://localhost:8080/test/...(此时 /test 才是有效路径)
Cookie[] cookies = request.getCookies();
if (cookies != null) { // 第一次获取不到 cookie
for (Cookie cookie : cookies) { // 遍历 cookie 集合
String name = cookie.getName(); // 获取 cookie 的名字
String value = cookie.getValue(); // 获取 cookie 的值
System.out.println(name + "=" + value);
}
}
}
}
生成的 cookie 数据: