android 清除cookie,Android 获取和清除 WebView 中的 Cookie

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

项目中如果用到了 WebView,那就免不了跟 Cookie 打交道。

比如,你时常需要判断用户的登录状态,如果用户未登录,那就必须限制部分功能的使用。

那么原生 Android 该如何获取 WebView 中的 Cookie 呢?

我们可以定制一个 WebViewClient 并重写内部的相关方法来实现,并不建议使用匿名类的方式。新建一个类 MyWebViewClient 继承自 WebViewClient,然后重写其 onPageFinished(WebView, String) 方法:public class MyWebViewClient extends WebViewClient {

String cookieTag = null;

String cookieTel = null;

@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

CookieManager cookieManager = CookieManager.getInstance();

String cookieStr = cookieManager.getCookie(url);

try {

cookieTag = cookieStr.substring(0, 8); // 确定前缀是不是 phoneNum

if (cookieTag.equals("phoneNum")) {

cookieTel = cookieStr.substring(9, 20); // phoneNum 后面的电话号码

}

} catch (Exception e) {

e.printStackTrace();

}

}

public String getCookieTag() {

return cookieTag;

}

public String getCookieTel() {

return cookieTel;

}

}

使用 CookieManager 的 getCookie() 方法来获取存储的 Cookie,这里判断 Cookie 中的前缀是否为 phoneNum,如果是的话证明已经登录,并截取后面 11 位数字为用户的手机号码,然后通过 Getter 来提供传值方法。

然后在 WebView 中配置这个自定义的 WebViewClient:MyWebViewClient myWebViewClient = new MyWebViewClient();

webView.setWebViewClient(myWebViewClient);

接着就可以通过相关的 Getter 方法来获取传值:String tel = myWebViewClient.getCookieTel();

于是获取 Cookie 的方法就完成了。

有了 Cookie,当用户退出登录时,我们也需要清除 Cookie:logOutBtn.setOnClickListener(v -> {

CookieSyncManager.createInstance(this);

CookieSyncManager.getInstance().startSync();

CookieManager.getInstance().removeSessionCookie();

CookieManager.getInstance().removeAllCookie();

CookieSyncManager.getInstance().sync();

webView.clearCache(true);

webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

webView.loadUrl(loginUrl); // 重新加载登录页面

Intent intent = getIntent();

finish();

startActivity(intent);

});

Android 为我们提供了很多与清除 Cookie 相关的操作,我基本都写上去了,你会发现我在下面销毁了当前 Activity 并重新启动,原因是上面清除的是本地的 Cookie,但有些逻辑我们已经从 Cookie 中获取了值并存储在全局变量中,使某些登录后才能使用的功能即使在清除 Cookie 后依然可以使用,所以销毁当前 Activity 可以把依附该 Activity 上的变量或引用随着 Activity 的生命周期而消亡。

当然也可以通过其他的逻辑避免这个问题,不过我觉得会复杂很多,不如这个方法用得方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值