首先我們認(rèn)識下什么是cookies:
cookie實際上是一個存在你硬盤里的數(shù)據(jù),但是這些數(shù)據(jù)很特殊,只能由web應(yīng)用提交給瀏覽器幫助存儲,并且我們還能讀取瀏覽器的cookie
web應(yīng)用一般只在cookie中存儲一些用戶信息等少量且暫時的數(shù)據(jù),數(shù)據(jù)量大則不適合存儲在cookies
一般瀏覽器對于每個web應(yīng)用會分別給予他們40個cookie用來存儲數(shù)據(jù),并且每個cookie的大小不超過4K(聽說部分瀏覽器的cookie能存很大的數(shù)據(jù),不過我們一般不會存這么大的數(shù)據(jù),因為數(shù)據(jù)提取的效率不高,影響性能)
說了這么多廢話,然后重點終于來了
java通過httpServletRequest接口來訪問瀏覽器請求中的cookies數(shù)據(jù)(這里先了解一下cookies來龍去脈,代碼待會一并給出)
每個cookie有兩個屬性:鍵 ,值(無特定格式字符串,所以可以diy存數(shù)據(jù),不過要注意URL編碼問題,編碼問題待會和代碼一同講)
如果我們需要存儲新的cookie我們可以new一個cookie實例 并通過httpservletRsponse提交到瀏覽器,進(jìn)而存儲到本地
下面給出cookie的一個通用類
/* * 該類可以從瀏覽器請求中提取出cookies并進(jìn)行對cookis的相關(guān)操作 *  */public class CookiesUtil extends BaseController {    /**   * 根據(jù)名字獲取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;  }  /**   * 保存Cookies   *    * @param response   *      servlet請求   * @param value   *      保存值   * @author jxf   */  public static HttpServletResponse setCookie(HttpServletResponse response, String name, String value,int time) {    // new一個Cookie對象,鍵值對為參數(shù)    Cookie cookie = new Cookie(name, value);    // tomcat下多應(yīng)用共享    cookie.setPath("/");    // 如果cookie的值中含有中文時,需要對cookie進(jìn)行編碼,不然會產(chǎn)生亂碼    try {      URLEncoder.encode(value, "utf-8");    } catch (UnsupportedEncodingException e) {      e.printStackTrace();    }    cookie.setMaxAge(time);    // 將Cookie添加到Response中,使之生效    response.addCookie(cookie); // addCookie后,如果已經(jīng)存在相同名字的cookie,則最新的覆蓋舊的cookie    return response;  }  有了上面的通用類我們可以讀取和新建cookie了,在這里我還要提一點:新建cookie的名字如果瀏覽器已經(jīng)存在,則不再重復(fù)添加,會覆蓋之前的cookie
瀏覽器如何查看請求的cookie和返回的cookie呢?拿Google瀏覽器舉個栗子
 
然后就是我們可能需要對cookie進(jìn)行刪除操作
/**    * <p>刪除無效cookie</p>    * <p>無效?1.過時 2.未發(fā)布</p>    * @param request    * @param response    * @param list    */   private void delectCookieByName(HttpServletRequest request, HttpServletResponse response,String deleteKey) throws NullPointerException {12     Map<String, Cookie> cookieMap = ReadCookieMap(request);17     for (String key : cookieMap.keySet()) {         if(key==deleteKey && key.equals(deleteKey)) {         Cookie cookie = cookieMap.get(key);21         cookie.setMaxAge(0);//設(shè)置cookie有效時間為0         cookie.setPath("/");//不設(shè)置存儲路徑         response.addCookie(cookie);       }      }   } 注意刪除cookie必須同時具備時間和路徑的參數(shù)不然部分瀏覽器刪除不了
以上就是Java 讀取和寫入瀏覽器Cookies的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對本站的支持!
新聞熱點
疑難解答
圖片精選