【Easylive】服务端操作 Cookie 的完整流程(结合案例解析)
【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版
以下通过 saveToken2Cookie
方法 说明服务端如何通过 HttpServletResponse
操作 Cookie,并附上完整案例和关键点解析。
1. 代码逐行解析
protected void saveToken2Cookie(HttpServletResponse response, String token) {
// 1. 创建一个新的 Cookie 对象
Cookie cookie = new Cookie(Constants.TOKEN_WEB, token);
// 2. 设置 Cookie 过期时间(7天)
cookie.setMaxAge(Constants.TIME_SECONDS_DAY * 7);
// 3. 设置 Cookie 的生效路径(根路径,全站有效)
cookie.setPath("/");
// 4. 将 Cookie 添加到响应中(通过 Set-Cookie 头发给浏览器)
response.addCookie(cookie);
}
2. 关键操作说明
操作 | 作用 | 对应 HTTP 协议行为 |
---|---|---|
new Cookie(name, value) | 创建 Cookie | 无(仅内存对象) |
setMaxAge(seconds) | 设置 Cookie 有效期 | 响应头 Set-Cookie: token=abc; Max-Age=604800 |
setPath("/") | 设置 Cookie 的作用路径 | 响应头 Set-Cookie: token=abc; Path=/ |
response.addCookie() | 将 Cookie 写入响应 | 浏览器收到后自动保存 |
3. 完整案例场景
场景描述
• 需求:用户登录成功后,服务端生成一个身份令牌(Token),并通过 Cookie 自动保存到浏览器。
• 技术实现:调用 saveToken2Cookie
方法。
代码示例(Spring MVC Controller)
@PostMapping("/login")
public String login(
@RequestParam String username,
@RequestParam String password,
HttpServletResponse response
) {
// 1. 验证用户名密码(伪代码)
boolean isValid = userService.checkLogin(username, password);
if (!isValid) {
return "登录失败";
}
// 2. 生成 Token(伪代码)
String token = jwtUtil.generateToken(username);
// 3. 将 Token 保存到 Cookie(关键操作!)
saveToken2Cookie(response, token);
return "登录成功";
}
// 复用之前的 Cookie 操作方法
protected void saveToken2Cookie(HttpServletResponse response, String token) {
Cookie cookie = new Cookie("AUTH_TOKEN", token);
cookie.setMaxAge(7 * 24 * 60 * 60); // 7天有效期
cookie.setPath("/"); // 全站有效
cookie.setHttpOnly(true); // 防止 XSS 攻击(可选)
response.addCookie(cookie);
}
4. 浏览器与服务器的交互流程
-
请求登录:
POST /login HTTP/1.1 Content-Type: application/x-www-form-urlencoded username=admin&password=123456
-
服务端响应(设置 Cookie):
HTTP/1.1 200 OK Set-Cookie: AUTH_TOKEN=xyz123; Max-Age=604800; Path=/; HttpOnly Content-Type: text/html 登录成功
-
后续请求(浏览器自动携带 Cookie):
GET /profile HTTP/1.1 Cookie: AUTH_TOKEN=xyz123
5. 关键注意事项
(1) Cookie 安全性
配置 | 作用 | 推荐值 |
---|---|---|
setHttpOnly(true) | 禁止 JavaScript 读取 Cookie(防 XSS) | 必须启用 |
setSecure(true) | 仅通过 HTTPS 传输(防窃听) | 生产环境启用 |
setDomain("example.com") | 限制 Cookie 的作用域名 | 按需设置 |
(2) 其他常见操作
• 删除 Cookie:
Cookie cookie = new Cookie("AUTH_TOKEN", null);
cookie.setMaxAge(0); // 立即过期
response.addCookie(cookie);
• 读取客户端 Cookie:
Cookie[] cookies = request.getCookies(); // 从 HttpServletRequest 获取
6. 总结
• 服务端操作 Cookie 的核心步骤:
1. 创建 `Cookie` 对象 → 2. 设置属性 → 3. 通过 `response.addCookie()` 下发。
• **实际应用场景**:
用户认证(Token)、会话管理、个性化设置等。
• 安全建议:
始终启用 HttpOnly
和 Secure
(HTTPS 环境下)。
通过这种方式,服务端可以轻松管理浏览器端的持久化数据! 🚀