会话与状态
HTTP 协议天生无状态,服务器没法天然认出连续请求是不是同一个用户。这就引出了会话管理的必要性。简单说,从你打开浏览器到关掉,这一连串操作算一次会话。期间产生的数据,比如登录状态、购物车,服务器得想办法存下来。
Cookie 机制原理
Cookie 就是服务器发给客户端的一小段文本。浏览器收到后存起来,下次再访问时自动带回去。靠这个,服务器就能认出来你是谁了。
Java Servlet 中的实现
在 Java Web 里,主要用 javax.servlet.http.Cookie 类来搞定。
设置 Cookie
登录成功后,把 Cookie 塞进响应头就行。
// 建个 Cookie 对象
Cookie cookie = new Cookie("username", "admin");
// 设有效期,单位秒,这里给 1 小时
cookie.setMaxAge(3600);
// 设路径,默认当前应用根路径
cookie.setPath("/");
// 写入响应
response.addCookie(cookie);
实际开发中要注意,别把敏感信息明文存进 Cookie。
读取 Cookie
每次请求过来,从请求头里把 Cookie 数组取出来。
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("username".equals(cookie.getName())) {
String value = cookie.getValue();
// 接着处理
}
}
}
要是没拿到,要么没登录,要么过期了。
删除 Cookie
删 Cookie 其实就是发个同名的,把有效期设成 0。
Cookie cookie = new Cookie("username", null);
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);

