写cookie:
Cookie cookie = new Cookie(Constants.cookie4SessionName, session.getSessionId());
cookie.setPath("/");//设置根路径
cookie.setDomain(".baidu.com");//设置访问域,主域和子域可以共享cookie或者设置跨域cookie
cookie.setMaxAge(Constants.defaultCookieSessionAge * 24 * 3600);
response.addCookie(cookie);
注:删除cookie将maxAge设置为0,同时要指定path和domain(如果不是默认的话,默认的path为写cookie的路径及子路径,默认的domain为域名全称),修改也类似,没有明确的修改和删除,实质是覆盖和超时失效。
cookie.setPath("/");
cookie.setDomain(".baidu.com");
cookie.setMaxAge(0);
读cookie:
public static String getSessionId(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
if(null == cookies || cookies.length == 0)
return null;
for(Cookie cookie : cookies){
if(Constants.cookie4SessionName.equals(cookie.getName())){
return cookie.getValue();
}
}
return null;
}
当然,可以把cookie封装成一个cookieMap使用更方便,Map<String, Cookie> cookieMap...
有点头疼的是,获取cookie的时候如果根域和全域都设置了一个键值对,得不到domain信息;可以先把不需要的那个domain下的cookie删除即可。
原文:http://my.oschina.net/wnjustdoit/blog/342243