Cookie与Servlet

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保存搜索记录。


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载