Сделать Android WebView не хранить куки или пароли


Я использую Android WebView для Twitter OAuth: Twitter просит пользователя войти в систему и авторизовать приложение, я получаю маркер доступа и сохраняю его в своем приложении.

Мне не нужно (и не нужно) хранить пароль пользователя, но WebView хранит файлы cookie Twitter, а также спрашивает пользователя, хочет ли он запомнить пароль. В результате этого даже после деавторизации приложения через его страницу учетной записи Twitter и мое приложение уничтожает маркеры доступа, в следующий раз, когда открывается WebView, он, вероятно, все еще входит в систему, и даже если нет, у него уже заполнено поле пароля.

Как я могу заставить WebView не запрашивать запоминание паролей и не сохранять файлы cookie сеанса? Если это невозможно, могу ли я удалить все его сохраненное состояние (за исключением, возможно, кэша изображений)?

6 60

6 ответов:

вы можете использовать это, чтобы отключить файлы cookie и очистите cookies, хранящиеся:

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);

для печенья:

CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);

Я не очень уверен в реализации cookies.

в одной строке, попробуйте это. Я думаю, что это должно называться после запуска браузера.

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();
    }

не очищайте куки, потому что это повлияет на другие сессии, такие как facebook и т. д.. хранится внутри файла cookie, поэтому попробуйте следовать этому методу

перед транзакцией oauth, например, перед созданием webview

CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);

после того, как сделка с OAuth пусть принимают куки, установив

cookieManager.setAcceptCookie(true);

это будет работать я проверил его..

я использовал следующее решение:

CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);

следующий метод не работал для меня:

CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();

возможной причиной может быть то, что мы не синхронизировали куки следующим образом:

CookieSyncManager.createInstance(getContext()).sync();

но это может занять время.

принуждение WebView не попросить запомнить пароли тоже не получится.

и это также не хорошо для удобства использования.