Cookie
Cookie實際上是一小段的文本資訊。用戶端請求伺服器,如果伺服器需要記錄該使用者狀态,就使用response向用戶端web頒發一個Cookie。用戶端會自動建立一個SQLit資料庫web會把Cookie自動儲存進去。
當web再請求該網站時,web會把請求的網址連同該Cookie一同送出給伺服器。伺服器檢查該Cookie,以此來辨認使用者狀态。
webview加載web網頁時會自動的把cookie儲存到手機磁盤根目錄(data/data/package_name/databases/webviewCookiesChromium.db)下。
頁面緩存
頁面緩存是指加載一個網頁時的html、JS、CSS等頁面或者資源資料。這些緩存資源是由于浏覽器的行為而産生 。
當web請求網站時會把 這些頁面緩存自動建立一個webviewCacheChromium檔案夾儲存在磁盤中。
webview加載web網頁時會自動把頁面緩存儲存在手機磁盤根目錄(data/data/package_name/cache/webviewCacheChromium)下。
測試總結
1. 清除App緩存時,Cookie不會移除(這裡指在點選手機管理應用程式裡面該App清除緩存按鈕);
2. 清除App緩存時,頁面緩存 會移除(這裡指在點選手機管理應用程式裡面該App清除緩存按鈕);
3. 清除App資料時,Cookie、頁面緩存 會被移除(這裡指在點選手機管理應用程式裡面該App清除資料按鈕);
4. 解除安裝App重新安裝,Cookie、頁面緩存 都會被移除;
5. 通過代碼也可以使Cookie、頁面緩存 移除等(見下面代碼);
關鍵代碼
/**
* webView加載網頁cookie的一些操作
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private WebView webView;
private TextView textView;
private EditText editText;
private Button cleanButton, urlButton, cookieButton,cacheButton;
private String url = "http://192.168.17.151/sample.aspx";
private String cookie;
private int i = ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
loadWebView();
}
private void initView() {
webView = (WebView) findViewById(R.id.webview);
textView = (TextView) findViewById(R.id.cookie_text);
cleanButton = (Button) findViewById(R.id.clean_button);
urlButton = (Button) findViewById(R.id.url_button);
cookieButton = (Button) findViewById(R.id.web_button);
cacheButton = (Button) findViewById(R.id.clean_cache_button);
cleanButton.setOnClickListener(this);
urlButton.setOnClickListener(this);
cookieButton.setOnClickListener(this);
cacheButton.setOnClickListener(this);
}
/**
* 加載網頁
*/
private void loadWebView() {
WebSettings settings = webView.getSettings();
settings.setSupportZoom(true); //支援縮放
settings.setBuiltInZoomControls(true); //啟用内置縮放裝置
settings.setJavaScriptEnabled(true); //啟用JS腳本
// settings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不走緩存,重新加載新的頁面
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webView.loadUrl(url);
cookie = CookieManager.getInstance().getCookie(url);
showCookies(cookie);
}
/**
* 顯示目前Cookies
*/
private void showCookies(String cookies) {
if (!StringUtils.isEmpty(cookies)) {
textView.setText("目前Cookie: " + cookies);
Log.d("cookie32", "cookie222== " + cookies);
}
}
/**
* 同步一下cookie
*/
public static void synCookies(Context context, String url, String cookies) {
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();//移除
cookieManager.setCookie(url, cookies);//cookies是在HttpClient中獲得的cookie
CookieSyncManager.getInstance().sync();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.clean_button:
//下面代碼清除App裡面的緩存的cookie資料
CookieSyncManager.createInstance(this);
CookieManager.getInstance().removeAllCookie();
CookieSyncManager.getInstance().sync();
break;
case R.id.clean_cache_button:
//下面是清除App緩存
webView.cleanCache(true);
break;
case R.id.url_button:
webView.loadUrl(url);
break;
case R.id.web_button://設定cookie
i++;
synCookies(MainActivity.this, url, "cookie test = " + i);
webView.loadUrl(url);
cookie = CookieManager.getInstance().getCookie(url);
showCookies(cookie);
break;
}
}
}
這裡對cookie的操作主要用到 CookieSyncManager 和 CookieManager 兩個類。
詳情請看:CookieSyncManager官方API
CookieManager官方API