cookie是web服务端程序存储在浏览器上的数据,长度最多4千字节。本文介绍在Java servlet中如何设置、读取和删除cookie。
Servlet中设置Cookie
如下所示,可以通过HttpServletResponse
对象设置Cookie:
Cookie cookie = new Cookie("myCookieName", "myCookieValue");
response.addCookie(cookie);
上面代码里,通过HttpServletResponse.addCookie()
方法添加名称为”myCookieName”的Cookie,其值为”myCookieValue”,可以看出Cookie也是以名/值对的形式保存。
当访问某个网站时,浏览器会自动上传由该网站保存在浏览器里的Cookie。浏览器只上传该网站的Cookie,不会上传其他网站的。
读取浏览器发送的cookie
可以通过HttpServletRequest
读取Cookie:
Cookie[] cookies = request.getCookies();
注意:getCookies()方法可能返回null
可以遍历cookie数组找到所需的cookie:
Cookie[] cookies = request.getCookies();
String userId = null;
for(Cookie cookie : cookies){
if("uid".equals(cookie.getName())){
userId = cookie.getValue();
}
}
如上所示,查找名称为”uid”的Cookie。
数组查找很不方便,下面的代码中,读取Cookie保存在HashMap
中,之后就可以很方便地获取Cookie值了:
Map cookieMap = new HashMap();
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
cookieMap.put(cookie.getName(), cookie);
}
String userId = cookieMap.get("uid");
Cookie过期
可以给Cookie设置过期时间,Cookie过期之后会被浏览器自动删除。
通过setMaxAge()
方法设置cookie过期时间,参数单位是秒:
Cookie cookie = new Cookie("uid", "123456");
cookie.setMaxAge(72 * 60 * 60); // 72 小时
response.addCookie(cookie);
如上所示,首先创建一个Cookie:“uid”,值为:“123456”,设置Cookie的过期时间为72小时,然后通过response.addCookie(cookie)
保存到浏览器。
主动删除Cookie
虽然Cookie在过期后会被浏览器自动删除,但有时候需要能主动删除Cookie。目前没有直接删除Cookie的方法,可通过设置过期时间为0或-1删除Cookie,
0立即删除,-1浏览器关闭时删除。
示例:
Cookie cookie = new Cookie("uid", "");
cookie.setMaxAge(0);
response.addCookie(cookie);
如上所示,如果浏览器中已有同名(’uid’)cookie,过期时间被设为0,会立即删除此cookie,如果原先没有存储cookie,同样过期时间为0,存储后立即删除。
Cookie其他设置
除了过期时间,还有其他很多设置,可参考相关文档。
Cookie使用场景
- 存储session ID,与session机制结合,实现用户登录机制;
- 存储用户相关信息,如访问电商网站时,可以存储浏览过的商品信息,之后可以根据这些信息向用户推荐商品,搜索引擎可以利用Cookie保存搜索记录。