介绍
1.Cookie的生命周期指的是如何管理Cookie什么时候被销毁(删除)
2.setMaxAge()
-
正数:表示在指定秒数后过期
-
负数:表示浏览器关闭,Cookie就会被删除(默认值是-1)
-
0:表示马上删除Cookie
演示Cookie生命周期
代码
package com.test.cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class CookieLive extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("CookieLive 被调用...");
//创建一个cookie,生命周期为60s
Cookie cookie = new Cookie("job", "java");
//1.cookie从创建开始计时,60秒后该cookie就无效了
//2.浏览器来根据创建的时间来计时,到60s后就认为该cookie无效
//3.如果该cookie无效,那么浏览器在发送http请求时,就不再携带该cookie
cookie.setMaxAge(60);
//将cookie保存到浏览器
response.addCookie(cookie);
//给浏览器返回信息,提示已经成功获取cookie信息
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.println("<h1> 设置cookie生命周期完成 </h1>");
//关闭资源
writer.flush();
writer.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
删除cookie
代码
//删除指定cookie,删除name
//1.得到指定cookie
Cookie[] cookies = request.getCookies();
Cookie nameCookie = CookieUtils.readCookieByName("name", cookies);
if(nameCookie!=null){
//2.将该cookie的生命周期设置为0
nameCookie.setMaxAge(0);
//3.重新保存该cookie,因为已将该cookie生命周期设置为0,等价于让浏览器删除该cookie
response.addCookie(nameCookie);
}else {
System.out.println("没有找到该cookie,无法删除");
}
cookie的有效路径
1.Cookie的有效路径Path设置
默认的路径(通过抓包查看):
2.Cookie的path属性可以有效过滤哪些cookie可以发送给浏览器,哪些不发。path属性是通过请求的地址来进行过滤的
3.规则:
cookie1.setPath=/工程路径
cookie2.setPath=/工程路径/aaa
请求地址:http://ip:端口/工程路径/资源
cookie1 会发送给服务器
cookie2:不会发送给服务器
请求地址:http://ip:端口/工程路径/aaa/资源
cookie1:会发送给服务器
cookie2:会发送给服务器
演示cookie有效路径的使用
代码
package com.test.cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class CookiePath extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("CookiePath 被调用了。。。");
//1.创建两个不同的cookie
Cookie cookie1 = new Cookie("address","长沙");
Cookie cookie2 = new Cookie("salary","20000");
//2.设置不同的路径
//request.getContextPath() =>工程路径
cookie1.setPath(request.getContextPath());
//cookie2的有效路径= /工程路径/aaa
cookie2.setPath(request.getContextPath()+"/aaa");
//3.保存到浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
//4.给浏览器返回信息,提示已经成功获取cookie信息
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.println("<h1> 设置cookie有效路径成功 </h1>");
//关闭资源
writer.flush();
writer.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
效果图
说明:如果没有设置cookie的有效路径,默认就是/工程路径