使Android WebView不存储cookie或密码

Thi*_*ilo 60 passwords cookies android oauth webview

我使用Android WebView for Twitter OAuth:Twitter要求用户登录并授权应用程序,我检索访问令牌并将其保留在我的应用程序中.

我不需要(也不要)存储用户密码,但WebView会保留Twitter的cookie,并且还会询问用户是否要记住密码.因此,即使在通过他的Twitter帐户页面取消授权应用程序并且我的应用程序销毁访问令牌之后,下次打开WebView时,它可能仍然登录,即使没有,它也有密码框已经填写.

如何强制WebView不要求记住密码,以及不保留会话cookie?如果那是不可能的,我可以删除它存储的所有状态(图像缓存除外)吗?

Cas*_*dim 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)
Run Code Online (Sandbox Code Playgroud)

  • 调用`CookieSyncManager.createInstance(this);`需要吗? (3认同)
  • 当我想在使用 WebView 的 Twitter 中成功注销时为我工作。谢谢。:) (2认同)
  • 这不会在运行 3 行时清除 cookie 吗?它不会阻止 cookie 被存储。这将需要类似`cookieManager.setAcceptCookie(false)`的东西。也就是说,这回答了我关于如何清除 cookie 的问题,谢谢。 (2认同)
  • @Erum 对我来说,诀窍是删除所有 cookie,但不包括行 `cookieManager.setAcceptCookie(false);` (2认同)

mud*_*dit 32

为了不保存密码:

WebView webview = new WebView(this);
WebSettings mWebSettings = webview.getSettings();
mWebSettings.setSavePassword(false);
mWebSettings.setSaveFormData(false);
Run Code Online (Sandbox Code Playgroud)

饼干:

CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);
Run Code Online (Sandbox Code Playgroud)

我不太确定cookies的实现.

  • 设置setSaveFormData(false)也会有所帮助. (6认同)

Jun*_*Jun 10

在一行中,试试这个.我认为这应该在启动webview后调用.

android.webkit.CookieManager.getInstance().removeAllCookie();
Run Code Online (Sandbox Code Playgroud)


Aym*_*oub 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();
    }
Run Code Online (Sandbox Code Playgroud)