2020Cookie学习笔记

package com.demo.test;


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;

public class CookieServlet extends HttpServlet {
//cookie不支持使用中文,要使用必须先做base64编码

//创建cookie方法
protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 解决响应中乱码问题
resp.setContentType("text/html;charset=UTF-8");
// 创建一个新的cookie
// 1、创建Cookie对象,服务器保存了Cookie信息
Cookie cookie = new Cookie("key1", "value1");
// 通知客户端保存Cookie resp.addCookie(cookie);不能省
resp.addCookie(cookie);
// 浏览器收到响应后,发现有set-cookie响应头,查找是否自身含有这个cookie信息,如果没有就储存一下,有就修改。

Cookie cookie01 = new Cookie("key2", "value2");
// 通知客户端保存Cookie resp.addCookie(cookie);不能省
resp.addCookie(cookie01);
// 浏览器收到响应后,发现有set-cookie响应头,查找是否自身含有这个cookie信息,如果没有就储存一下,有就修改。

resp.getWriter().write("Cookie创建成功!");
}

// 获取cookie方法
protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 通过getCookies方法获取,反复一个cookie数组;
Cookie[] cookies = req.getCookies();

//
Cookie iWantCookie = new CookieUtils().findCookie("key1", cookies);

/* 如果cookie不等于null,就是找到了需要的cookie */
if (null != iWantCookie) {
resp.getWriter().write(iWantCookie.getName() + "=" + iWantCookie.getValue());
}
}

protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) {
// 改变一个cookie的值
/*
* 方法一、1
* 1、先创建一个要修改的同名的cookie对像
* 2、在构造器,同时赋予新的Cookie值
* 3、调用response.addCookie(cookie);
* */
/*Cookie cookie = new Cookie("key1", "key1Value");
resp.addCookie(cookie);
CookieServlet cookieServlet = new CookieServlet();
try {
cookieServlet.getCookie(req, resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}*/
// 方法二:
/**
* 1、先查找到需要修改的Cookie对象
* 2、调用setValue()方法赋予新的Cookie值
* 3、调用response.addCookie()通知客户端保存修改
*/
Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
if (cookie != null) {
cookie.setValue("key2Value2");
resp.addCookie(cookie);
}
}

/**
* cookie的生存控制指的是如何管理Cookie什么时候被销毁(删除)
* setMaxAge() 正值表示cookie将会在该值所表示的秒数(整数)之后过期,注意该值时cookie的最大生存时间,不是cookie当前的生存时间
* 负值意味着,cookie不会持久储存,将在web浏览器退出时删除,0值会导致删除Cookie(立即)
*/
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) {
Cookie cookie = new Cookie("default", "defaultValue");
cookie.setMaxAge(-1);//设置存活时间
resp.addCookie(cookie);
}

protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) {
// 先找到要删除的cookie对象
// 设置cookie的setMaxAge为零,立即删除cookie,调用setMaxAge(0);
// 调用response.addCookie(cookie)
resp.setContentType("text/html;charset=UTF-8");
Cookie[] cookies = req.getCookies();
Cookie cookie = CookieUtils.findCookie("key2", cookies);
if (cookie != null) {
cookie.setMaxAge(0);
resp.addCookie(cookie);
try {
resp.getWriter().write("key2已删除");
} catch (IOException e) {
e.printStackTrace();
}
}
}

protected void life3600(HttpServletRequest req, HttpServletResponse resp) {
// 设置cookie存活一个小时
Cookie cookie = new Cookie("life3600", "value3600");
cookie.setMaxAge(60 * 60);//设置时间为60*60秒
resp.addCookie(cookie);
}

/*
*Cookie有效路径path的设置
* Cookie的path属性可以有效过滤哪些Cookie可以发送给服务器,哪些不发
* path属性是通过请求的地址来进行有效的过滤。
*
* CookieA path=/工程路径
* CookieB path=/工程路径/abc
*
* 请求地址如下:
* http://ip:port/工程路径/a.html
* CookieA 发送
* CookieB 不发送
*
* http://ip:port/工程路径/abc/a.html
* CookieA 发送
* CookieB 发送
*/
protected void testPath(HttpServletRequest req, HttpServletResponse resp) {
resp.setContentType("text/html;charset=UTF-8");
Cookie cookie = new Cookie("testPath", "pathValue");
cookie.setPath( req.getContextPath()+"/abc"); //=====>>>> /工程路径/abc,该cookie必须在有abc路径是才会创建
resp.addCookie(cookie);
try {
resp.getWriter().write("创建了一个带有path路径的Cookie");
} catch (IOException e) {
e.printStackTrace();
}
}

}
这里还是用了一个cookie查找类
package com.demo.test;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;

public class CookieUtils {
/**
*查找指定名称的Cookie对象
* @param name 指定cookie的name
* @param cookies 传入客户端cookie数组
* @return 返回查找到的cookie
*/
public static Cookie findCookie(String name,Cookie[] cookies){
if (name==null||cookies==null||cookies.length==0){
return null;
}
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())){
return cookie;
}
}
return null;
}
}


posted on 2020-09-15 08:47  youlingdada  阅读(130)  评论(0编辑  收藏  举报