App中Web缓存机制

本文介绍了App中Web缓存的机制,包括Cookie的使用和页面缓存的存储。当清除App缓存时,Cookie不会被移除,但页面缓存会被删除。而清除App数据或卸载重装App时,两者都会被移除。关键操作Cookie可使用CookieSyncManager和CookieManager。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值