Cookie的使用细节
- Cookie存活时间
- 默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
- setMaxAge(int seconds): 设置Cookie存活时间
- 正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
- 负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
- 零:删除对应Cookie
- Cookie存储中文
- Cookie不能直接存储中文
- 如需要存储,则需要进行转码:URL编码
// AServlet.java
@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 发送Cookie
String value = "张三";
// URL编码
value = URLEncoder.encode(value, "UTF-8");
System.out.println("存储数据:" + value);
// 1. 创建Cookie对象
Cookie cookie = new Cookie("username", value);
// 设置存活时间 1周 7天
cookie.setMaxAge(60*60*24*7);
// 2. 发送cookie, response
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
// BServlet.java
@WebServlet("/bServlet")
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取Cookie
// 1. 获取Cookie数组
Cookie[] cookies = req.getCookies();
// 2. 遍历数组
for (Cookie cookie : cookies) {
// 3. 获取数据
String name = cookie.getName();
if ("username".equals(name)) {
String value = cookie.getValue();
// URL解码
value = URLDecoder.decode(value, "UTF-8");
System.out.println(name + ":" + value);
break;
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}