Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android WebView中Header與Cookie應用場景及具體使用

Android WebView中Header與Cookie應用場景及具體使用

編輯:關於Android編程

首先回顧一下Cookie與Header這兩個重要的概念,不太清楚的話可以看我之前的博客或者查詢一下相關的資料:

會話技術 Cookie和Session

HTTP協議


這裡將兩者在Android平台上做一個簡單的對比:

Cookie vs Header


Cookie headers
生存周期 一段時期有效 每次都需要重新傳遞

讀取 容易讀取 Ajax請求不能讀取

WebView支持 全支持 2.2以上才支持



在Android手機中,Cookie的相關信息保存在/data/data/package_name/database/webview.db中.

Cookie從Android最早的版本已經開始支持. 但Cookie在Android2.2以上才WebView才支持headers(Android2.2才加入了webview.load(url,headers)的API).這方面還好,畢竟現在主流的手機已經普遍安裝了Android4.0及以上的版本,2.2以下的手機市場占有率並不多了,受到影響不大.

但是Ajax請求不能讀取影響就比較嚴重了,畢竟現在的Web頁面大量應用了Ajax跳轉,不可能不處理這種情況. 關於這方面我在之前的Android WebView常見問題及解決方案匯總 中已經提到,當時是采取特殊標記,過濾Ajax的url,采取將參數拼接到URL末尾的方式.解決.

而Cookie呢,無論是獲取還是操作相當簡單,無論是Java還是Android平台都有對應完善的API和文檔描述.


然後看一下Cookie與Header的應用場景,正好是由兩者的生命周期來決定的:

Headers每次都要重新獲取並進行傳遞,而Cookie,大家想必也知道,本身借用了session的實現,在web端長用與保持比如登錄,購物車等狀態的保

概括地來說,如果需要傳遞一些可能會頻繁更新的信息,我們可以使用Headers或者拼接參數的方法(處理ajax等非超鏈接請求).但如果只是需要保持一定的狀態呢,就需要使用Cookie.

從另外一個角度來說, 使用Header傳遞數據往往導致用戶使用客戶端時,一定操作後會導致顯示不同的頁面或者頁面更新. 而Cookie的使用,使得整個頁面或者頁面固定的部分顯示固定的信息.


讓我們看一下如何將Cookie和WebView進行結合:

Cooki的獲取:

  CookieManager cm = CookieManager.getInstance();
  String Cookiestr = cm.getCookie(url);

Cookie的同步:

CookieSyncManager.createInstance(this);

CookieSyncManager.getInstance().sync();

注意,此處代碼需在在webview加載URL前設置,並且在調用後,不再設置webview的websetttings屬性,否則會導致失效.


一般通過HttpClient,獲取服務器的Cookie後再進行設置(比如一些登錄的用戶信息或者狀態信息):

List cookies = httpclient.getCookieStore().getCookies();  



清除Cookie:

CookieManager.getInstance().removeSessionCookie(); 

CookieManager.getInstance().removeAllCookies();

如果只是需要刪除和特定url關聯的cookie,需要先進行移除後同步:

	/**
	 * 同步一下cookie
	 */
	public static void synCookies(Context context, String url) {
		CookieSyncManager.createInstance(context);
		CookieManager cookieManager = CookieManager.getInstance();
		cookieManager.setAcceptCookie(true);
		cookieManager.removeSessionCookie();//移除
		cookieManager.setCookie(url, cookies);//指定要修改的cookies
		CookieSyncManager.getInstance().sync();
	}




  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved