1. 程式人生 > >cookie中儲存登入資訊的基本操作

cookie中儲存登入資訊的基本操作

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;


import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class CookieUtil {
	/**
	 * 設定cookie
	 * @param response
	 * @param name  cookie名字
	 * @param value cookie值
	 * @param maxAge cookie生命週期  以秒為單位
	 * @throws UnsupportedEncodingException
	 */
	public static void addCookie(HttpServletResponse response,String name,String value,int maxAge) throws UnsupportedEncodingException{
		//--格林威志時間格式化,注意,這是這個引數的格式要求。
        SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT'", Locale.US);
		StringBuilder builder=new StringBuilder();
		builder.append(name + "=" + URLEncoder.encode(value, "UTF-8") + "; ");
		builder.append("Path=/; ");
		//設定cookies失效時間maxAge秒,注意與maxAge不可同時使用,後者當關閉瀏覽器後cookies即失效
		builder.append("Expires=" + sdf.format(new Date(new Date().getTime()+maxAge*1000)));
		response.setHeader("Set-Cookie", builder.toString());
	    /*Cookie cookie = new Cookie(name,URLEncoder.encode(value, "UTF-8"));
	    cookie.setPath("/");
	    //if(maxAge>0)  cookie.setMaxAge(maxAge);
	    response.addCookie(cookie);
	    */
	}


	/**
	 * 根據名字獲取cookie
	 * @param request
	 * @param name cookie名字
	 * @return
	 */
	public static Cookie getCookieByName(HttpServletRequest request,String name){
	    Map<String,Cookie> cookieMap = ReadCookieMap(request);
	    if(cookieMap.containsKey(name)){
	        Cookie cookie = (Cookie)cookieMap.get(name);
	        return cookie;
	    }else{
	        return null;
	    }
	}


	/**
	 * 將cookie封裝到Map裡面
	 * @param request
	 * @return
	 */
	private static Map<String,Cookie> ReadCookieMap(HttpServletRequest request){
	    Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
	    Cookie[] cookies = request.getCookies();
	    if(null!=cookies){
	        for(Cookie cookie : cookies){
	            cookieMap.put(cookie.getName(), cookie);
	        }
	    }
	    return cookieMap;
	}


	/**
     * 刪除cookie
     * @param request
     * @param response
     * @param name
     */
    public static void delCookie(HttpServletRequest request,HttpServletResponse response,String name){
        Cookie[] cookies = request.getCookies();
        if (null==cookies) {
            System.out.println("沒有cookie==============");
        } else {
            for(Cookie cookie : cookies){
                if(cookie.getName().equals(name)){
                    cookie.setValue(null);
                    cookie.setMaxAge(0);// 立即銷燬cookie
                    cookie.setPath("/");
                    System.out.println("Test1被刪除的cookie名字為:"+cookie.getName());
                    response.addCookie(cookie);
                    break;
                }
            }
        }
    }
}