本文目录导读:

在 Java Web 开发中,Cookie 是用于在客户端(浏览器)存储少量数据的机制,通常通过 javax.servlet.http.Cookie 类和 HttpServletRequest/HttpServletResponse 对象进行操作。
以下是一个完整的 Java Servlet 案例,演示如何写入和读取 Cookie 数据。
写入 Cookie(服务端发送给客户端)
步骤:
- 创建
Cookie对象(键值对)。 - 设置属性(过期时间、路径、域名等)。
- 通过
response.addCookie()发送给浏览器。
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("/writeCookie")
public class WriteCookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 1. 创建 Cookie 对象 (键: username, 值: Jack)
Cookie usernameCookie = new Cookie("username", "Jack");
// 2. 设置 Cookie 的有效期(单位:秒)
// 正数:过期时间(秒),负数:仅本次会话有效,0:立即删除
usernameCookie.setMaxAge(60 * 60); // 1小时后过期
// 3. 设置 Cookie 的访问路径(可选,默认是当前应用的根路径)
// 只有访问该路径下的资源时才会携带此 Cookie
usernameCookie.setPath("/");
// 4. 设置域名(可选,用于跨子域共享 Cookie)
// usernameCookie.setDomain(".example.com");
// 5. 设置 HttpOnly(防止 XSS 攻击时被 JS 读取,增强安全性)
usernameCookie.setHttpOnly(true);
// 6. 将 Cookie 添加到响应中
resp.addCookie(usernameCookie);
// 7. 给客户端返回提示
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("Cookie 已写入!");
}
}
读取 Cookie(服务端从客户端请求中获取)
步骤:
- 通过
request.getCookies()获取所有 Cookie 数组。 - 遍历数组,根据名称查找目标 Cookie。
- 使用
cookie.getValue()获取值。
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("/readCookie")
public class ReadCookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String username = null;
// 1. 获取请求中携带的所有 Cookie
Cookie[] cookies = req.getCookies();
if (cookies != null) {
// 2. 遍历 Cookie 数组,查找名为 "username" 的 Cookie
for (Cookie cookie : cookies) {
if ("username".equals(cookie.getName())) {
username = cookie.getValue();
break; // 找到后退出循环
}
}
}
// 3. 根据结果返回响应
resp.setContentType("text/html;charset=UTF-8");
if (username != null) {
resp.getWriter().write("读取到的 username: " + username);
} else {
resp.getWriter().write("未找到 username Cookie(可能已过期或未设置)");
}
}
}
删除 Cookie
删除 Cookie 通常通过设置 MaxAge 为 0 来实现(注意路径必须与设置时一致):
Cookie deleteCookie = new Cookie("username", "");
deleteCookie.setMaxAge(0); // 立即过期
deleteCookie.setPath("/"); // 路径必须与写入时相同
resp.addCookie(deleteCookie);
完整测试流程(使用浏览器或 Postman)
-
访问写入接口
浏览器访问:http://localhost:8080/你的项目名/writeCookie
服务端发送一个名为username、值为Jack、有效期1小时的 Cookie。 -
访问读取接口
浏览器访问:http://localhost:8080/你的项目名/readCookie
服务端从请求中解析 Cookie,输出读取到的 username: Jack。
重要注意事项
| 要点 | 说明 |
|---|---|
| 大小限制 | 单个 Cookie 不超过 4KB,每个域名下最多约 50 个 Cookie。 |
| 安全敏感数据 | 不要存放密码、Token 等敏感信息(除非使用 HTTPS + Secure 标记)。 |
| 编码问题 | 如果值包含中文或特殊字符,建议使用 URLEncoder.encode() / URLDecoder.decode() 进行编码/解码。 |
| HttpOnly | 设置为 true 可防止 JavaScript 通过 document.cookie 读取,降低 XSS 攻击风险。 |
| 跨域问题 | 默认情况下,Cookie 不会跨域传递,需设置 Domain 和 SameSite 属性。 |
中文值编码示例(避免乱码)
// 写入时编码
String chineseValue = "张三";
Cookie cookie = new Cookie("username", URLEncoder.encode(chineseValue, "UTF-8"));
cookie.setMaxAge(3600);
resp.addCookie(cookie);
// 读取时解码
Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if ("username".equals(c.getName())) {
String decodedValue = URLDecoder.decode(c.getValue(), "UTF-8");
// 使用 decodedValue
}
}
}
- 写入:
new Cookie(键, 值)→setMaxAge()→response.addCookie() - 读取:
request.getCookies()→ 遍历匹配 →cookie.getValue() - 删除:新建同名 Cookie 且
MaxAge=0,路径一致即可清除。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播