使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了..