Java读写Cookie简单封装

 

Java读写Cookie操作,简单封装:

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;

public class CookieUtil {

	private static Logger log = Logger.getLogger(CookieUtil.class);
	
	/**
	 * 根据cookieName查询对应的cookieValue
	 * @param req
	 * @param cookieName
	 * @return
	 */
	public static String getCookieValue(HttpServletRequest req,String cookieName){
		Cookie jcookies[] = req.getCookies();
		if(jcookies!=null){
			for (int i = 0; i < jcookies.length; i++) {
				Cookie cookie = jcookies[i];
				if (cookieName.equals(cookie.getName())) {
					try {
						return URLDecoder.decode(cookie.getValue(),"utf-8");
					} catch (UnsupportedEncodingException e) {
						log.error("", e);
					}
					return cookie.getValue();
				}
			}
		}	
		return null;
	}
	
	/**
	 * 写cookie
	 * @param name
	 * @param value
	 * @param maxAge 指定cookie多长时间后过期,单位秒(正数表示多长时间后过期,0表示要删除该cookie,负数表示该cookie不会持久化,浏览器关闭时,则删除该cookie)
	 * @param path  设置cookie路径,在特定path下的Cookie只能被该path以及子目录下的读取,如果需要整个应用共享,可以设置path=/
	 * @param domain 设置cookie域名,如www.test.com,.test.com
	 * @param response
	 * @return
	 */
	public static boolean setCookie(String name,String value,int maxAge,String path,String domain,HttpServletResponse response){
		if(value != null){
			try {
				value = URLEncoder.encode(value, "utf-8");
			} catch (UnsupportedEncodingException e) {
				log.error("", e);
			}
		}
		Cookie cookie = new Cookie(name,value);
		cookie.setMaxAge(maxAge);
		if(path != null){
			cookie.setPath(path);
		}
		if(domain != null && !domain.equals("localhost")){
			cookie.setDomain(domain);
		}
		cookie.setSecure(false);//设置为true,则仅有https请求时,cookie才会被发送。
		//cookie.setHttpOnly(true);//设置为true,客户端脚本无法操作cookie,能有效防止跨站点脚本攻击。
		response.addCookie(cookie);
		return true;
	}
	
}

 

 

补充:

1、如果domain是localhost,则无需显式的的调用cookie.setDomain("localhost"),如果显式的设置cookie.setDomain("localhost"),会导致从请求中取不到该cookie。

2、 servlet3.0开始(Tomcat7.0开始支持servlet3.0),新增加了方法 void setHttpOnly(boolean isHttpOnly),设置true的cookie,客户端脚本(如javascript)是访问不到的,该设置能防止跨站点脚本的攻击。

 

你可能感兴趣的:(cookie)