Java Cookie 读写操作案例
创建 Cookie(写入)
服务端创建 Cookie
// 创建Cookie
Cookie cookie = new Cookie("username", "张三");
// 设置Cookie有效期(单位:秒),7天
cookie.setMaxAge(7 * 24 * 60 * 60);
// 设置路径,根目录下所有URL都可用
cookie.setPath("/");
// 设置域名(可选)
cookie.setDomain(".example.com");
// 设置HTTP Only,防止JavaScript访问
cookie.setHttpOnly(true);
// 设置安全标志(仅HTTPS传输)
cookie.setSecure(true);
// 将Cookie添加到响应中
response.addCookie(cookie);
// 创建多个Cookie
Cookie cookie2 = new Cookie("userid", "1001");
cookie2.setMaxAge(3600); // 1小时
cookie2.setPath("/");
response.addCookie(cookie2);
JavaScript 创建 Cookie(客户端)
// 创建Cookie,默认会话结束时过期 document.cookie = "username=张三"; // 设置过期时间(7天后) let date = new Date(); date.setTime(date.getTime() + 7 * 24 * 60 * 60 * 1000); document.cookie = "username=张三; expires=" + date.toUTCString(); // 设置路径和域名 document.cookie = "username=张三; path=/; domain=.example.com"; // 设置Secure和SameSite document.cookie = "username=张三; Secure; SameSite=Strict";
读取 Cookie
服务端读取 Cookie
// 获取所有Cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
int maxAge = cookie.getMaxAge();
String path = cookie.getPath();
String domain = cookie.getDomain();
boolean secure = cookie.getSecure();
System.out.println("Cookie名称: " + name);
System.out.println("Cookie值: " + value);
System.out.println("有效期: " + maxAge + "秒");
System.out.println("路径: " + path);
System.out.println("------------------------");
// 获取特定Cookie
if ("username".equals(name)) {
String username = value;
// 处理业务逻辑
}
}
} else {
System.out.println("没有找到任何Cookie");
}
使用工具方法读取特定 Cookie
public class CookieUtil {
/**
* 根据名称获取Cookie值
*/
public static String getCookieValue(HttpServletRequest request, String cookieName) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookieName.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
/**
* 获取所有Cookie的Map集合
*/
public static Map<String, String> getAllCookies(HttpServletRequest request) {
Map<String, String> cookieMap = new HashMap<>();
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
cookieMap.put(cookie.getName(), cookie.getValue());
}
}
return cookieMap;
}
}
// 使用示例
String username = CookieUtil.getCookieValue(request, "username");
Map<String, String> allCookies = CookieUtil.getAllCookies(request);
JavaScript 读取 Cookie
// 获取所有Cookie
console.log(document.cookie);
// 获取特定Cookie值
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
// 使用示例
let username = getCookie('username');
console.log(username); // 输出:张三
修改 Cookie
服务端修改
// 获取现有Cookie并修改
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("username".equals(cookie.getName())) {
// 修改值
cookie.setValue("李四");
// 修改其他属性
cookie.setMaxAge(7 * 24 * 60 * 60); // 重置有效期
cookie.setPath("/");
// 将修改后的Cookie添加到响应
response.addCookie(cookie);
break;
}
}
}
JavaScript 修改
// 修改Cookie直接覆盖即可 document.cookie = "username=李四; path=/; max-age=" + (7 * 24 * 60 * 60);
删除 Cookie
服务端删除
// 方法1:设置MaxAge为0
Cookie cookie = new Cookie("username", null);
cookie.setMaxAge(0); // 立即过期
cookie.setPath("/"); // 路径必须与创建时一致
response.addCookie(cookie);
// 方法2:设置MaxAge为负数(会话结束时删除)
Cookie cookie2 = new Cookie("userid", null);
cookie2.setMaxAge(-1);
cookie2.setPath("/");
response.addCookie(cookie2);
JavaScript 删除
// 设置过期时间为过去的时间 document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/"; // 或者设置max-age为0 document.cookie = "username=; max-age=0; path=/";
完整示例:登录状态管理
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String remember = request.getParameter("remember");
// 创建登录Cookie
Cookie loginCookie = new Cookie("loginUser", username);
loginCookie.setPath("/");
loginCookie.setHttpOnly(true);
if ("on".equals(remember)) {
// 记住我:有效期7天
loginCookie.setMaxAge(7 * 24 * 60 * 60);
} else {
// 不记住:会话结束时删除
loginCookie.setMaxAge(-1);
}
response.addCookie(loginCookie);
response.sendRedirect("home.jsp");
}
}
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 删除登录Cookie
Cookie cookie = new Cookie("loginUser", "");
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);
response.sendRedirect("login.jsp");
}
}
注意事项
-
编码问题:Cookie值不能包含空格、分号、逗号等特殊字符,建议进行URL编码

String encodedValue = URLEncoder.encode("张三", "UTF-8"); Cookie cookie = new Cookie("username", encodedValue); // 读取时解码 String decodedValue = URLDecoder.decode(cookie.getValue(), "UTF-8"); -
安全考虑:
- 敏感信息不要存储在Cookie中
- 设置HttpOnly防止XSS攻击
- 使用Secure确保HTTPS传输
- 设置合适的Path和Domain范围
-
大小限制:单个Cookie大小不超过4KB,每个域名下Cookie总数不超过20个
-
浏览器兼容性:不同浏览器对Cookie的支持有差异,注意测试
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播