作者:闲云野鹤-男主角_185 | 来源:互联网 | 2023-08-24 19:55
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;
/*
会话管理:管理浏览器客户端和服务器之间会话过程中产生的会话数据;
会话管理需要用到会话技术,会话技术有两种:
1、COOKIE 技术:会话数据保存在浏览器客户端;
2、Session 技术:会话数据保存在服务器端;
COOKIE 类:用于存储会话数据;
1、构造 COOKIE 对象;
new COOKIE(String name, String value);
2、设置 COOKIE
setPath(String uri):设置 COOKIE 的有效访问路径;
setMaxAge(int expiry):设置 COOKIE 的有效时间;
setValue(String newValue):设置 COOKIE 的值;
3、发送 COOKIE 到浏览器端保存
response.addCOOKIE(COOKIE COOKIE);
4、服务器端接收 COOKIE,获取到的是一个 COOKIE 的集合;
COOKIE[] request.getCOOKIEs();
COOKIE 的原理:
1、服务器创建 COOKIE 对象,把会话数据保存到 COOKIE 对象中;
new COOKIE("name", "value");
2、服务器发送 COOKIE 对象到浏览器客户端;
response.addCOOKIE(COOKIE);
3、浏览器得到服务器发送的 COOKIE,然后保存到浏览器端;
4、浏览器在下次访问服务器时,会将 COOKIE 信息一起发送到服务器;
5、服务器接收浏览器发送的 COOKIE,对 COOKIE 中的会话数据进行解析;
request.getCOOKIEs();
COOKIE 数据类型只能存储 字符串类型(不支持中文);一个 COOKIE 只能标识一种信息,他至少包含一个标识该信息的名称(NAME)和值(VALUE);
一个 web站点 可以给一个 web浏览器 发送多条COOKIE,一个 web浏览器 也可以存储 多个web站点 提供的COOKIE;
浏览器一般只允许存放300个 COOKIE,每个站点最多存放20个 COOKIE,每个 COOKIE 的大小限制为 4KB;
*/
@WebServlet(name = "COOKIEDemo1", value = "/COOKIEDemo1")
public class COOKIEDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 通过 响应头和请求头 实现 COOKIE 数据的发送和接收
// 1、设置 set-COOKIE 响应头,将 COOKIE 数据发送到浏览器客户端
// resp.setHeader("set-COOKIE", "name=Jack, age=22");
// 2、从 COOKIE请求头 中获取 COOKIE 数据; (第一次执行时,浏览器还没有 COOKIE,所以获取不到数据)
// String COOKIE = req.getHeader("COOKIE");
// System.out.println("COOKIE: " + COOKIE);
// 通过 COOKIE对象 实现 COOKIE数据 的发送和接收
// 1、创建 COOKIE 对象
COOKIE COOKIE1 = new COOKIE("name", "Jack");
COOKIE COOKIE2 = new COOKIE("age", "22");
// 2、把 COOKIE 对象发送到浏览器(自动拼装 set-COOKIE 响应头)
// 注意:如果存在同名的 COOKIE 数据,则不会再次发送 COOKIE。
// 所以在发送同名 COOKIE 之前,需要先清除浏览器缓存的 COOKIE 数据。
resp.addCOOKIE(COOKIE1);
resp.addCOOKIE(COOKIE2);
// 3、接收浏览器发送的 COOKIE;(获取的是客户端所有 COOKIE 的集合)
COOKIE[] COOKIEs = req.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 信息: