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 = 0;
@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