【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-urlencodedusername=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 环境下)。
通过这种方式,服务端可以轻松管理浏览器端的持久化数据! 🚀