使Android WebView不存储cookie或密码
我使用Android的WebView Twitter的OAuth :Twitter要求用户login和授权的应用程序,我检索访问令牌,并坚持它在我的应用程序。
我没有必要(也没有)存储用户密码,但WebView保持Twitter的cookie,并且还询问用户是否想要记住密码。 因此,即使在通过他的Twitter账户页面取消授权应用程序并且我的应用程序破坏了访问令牌之后,下次打开WebView时,它仍然可能仍然login,即使没有,密码框已经填满。
我如何强制WebView不要求记住密码,也不要坚持会话cookie? 如果这是不可能的,我可以删除所有的存储状态(除了图像caching除外)?
您可以使用此function来防止存储Cookie,并清除已存储的Cookie:
CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookies(callback); cookieManager.setAcceptCookie(false); WebView webview = new WebView(this); WebSettings ws = webview.getSettings(); ws.setSaveFormData(false); ws.setSavePassword(false); // Not needed for API level 18 or greater (deprecated)
对于不保存密码:
WebView webview = new WebView(this); WebSettings mWebSettings = webview.getSettings(); mWebSettings.setSavePassword(false); mWebSettings.setSaveFormData(false);
cookies:
CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(false);
我不是很确定cookie的实施。
在一行中,试试这个。 我认为这应该在启动webview后调用。
android.webkit.CookieManager.getInstance().removeAllCookie();
这是我在这方面看到的最好的答案
webView.clearCache(true); webView.clearHistory(); WebSettings webSettings = webView.getSettings(); webSettings.setSaveFormData(false); webSettings.setSavePassword(false); // Not needed for API level 18 or greater (deprecated) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { CookieManager.getInstance().removeAllCookies(null); CookieManager.getInstance().flush(); } else { CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(this); cookieSyncMngr.startSync(); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); cookieManager.removeSessionCookie(); cookieSyncMngr.stopSync(); cookieSyncMngr.sync(); }
我使用了以下解决scheme:
CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(false);
以下方法不适用于我:
CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie();
可能的原因可能是我们没有同步cookies如下:
CookieSyncManager.createInstance(getContext()).sync();
但可能需要时间。
强制WebView
不要求记住密码也是行不通的。
而且这对可用性也不好。
不要清除cookie,因为它会影响像Facebook等其他会议。存储在cookie中,所以试着按照这个方法
在oauth事务之前,比如在webview创build之前
CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(false);
oauth事务之后,通过设置接受cookie
cookieManager.setAcceptCookie(true);
它会工作,我已经testing了..