我使用Android WebView for Twitter OAuth:Twitter要求用户登录并授权应用程序,我检索访问令牌并将其保留在我的应用程序中。
我不需要(也不会)存储用户密码,但WebView会保留Twitter的cookie,并且还会询问用户是否要记住密码。因此,即使在通过他的Twitter帐户页面取消授权应用程序并且我的应用程序销毁访问令牌之后,下次打开WebView时,它可能仍然登录,即使没有,它也有密码框已经填好。
如何强制WebView不要求记住密码,以及不保留会话cookie? 如果那是不可能的,我可以删除所有存储状态(图像缓存除外)吗?
答案 0 :(得分:94)
您可以使用它来阻止存储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)
答案 1 :(得分:32)
不保存密码:
WebView webview = new WebView(this);
WebSettings mWebSettings = webview.getSettings();
mWebSettings.setSavePassword(false);
mWebSettings.setSaveFormData(false);
对于cookies:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);
我不太确定cookies的实现。
答案 2 :(得分:10)
在一行中,试试这个。我认为这应该在启动webview后调用。
android.webkit.CookieManager.getInstance().removeAllCookie();
答案 3 :(得分:8)
这是我在这个背景下看到的最佳答案
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();
}
答案 4 :(得分:2)
请勿清除Cookie,因为它会影响其他会话,例如facebook等。存储在Cookie中,所以请尝试按照此方法
在oauth事务之前,例如在创建webview之前
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);
在oauth交易之后,通过设置
接受cookiecookieManager.setAcceptCookie(true);
它将起作用我已经测试过了..
答案 5 :(得分:1)
我使用了以下解决方案:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);
以下方法对我不起作用:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
可能的原因可能是我们未将Cookie同步如下:
CookieSyncManager.createInstance(getContext()).sync();
但这可能需要时间。
强制WebView
不要求记住密码也行不通。
它对可用性也不利。