Сделать Android WebView не хранить куки или пароли - PullRequest
60 голосов
/ 23 марта 2011

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

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

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

Ответы [ 6 ]

94 голосов
/ 17 июня 2011

Вы можете использовать это, чтобы предотвратить сохранение файлов 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)
32 голосов
/ 23 марта 2011

Для сохранения паролей:

WebView webview = new WebView(this);
WebSettings mWebSettings = webview.getSettings();
mWebSettings.setSavePassword(false);
mWebSettings.setSaveFormData(false);

Для файлов cookie:

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

Я не очень уверен в реализации файлов cookie.

10 голосов
/ 24 июня 2013

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

android.webkit.CookieManager.getInstance().removeAllCookie();
8 голосов
/ 20 января 2016

Это лучший ответ, который я видел в этом контексте

    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();
    }
2 голосов
/ 01 октября 2013

Не очищать куки, потому что это повлияет на другие сеансы, такие как facebook и т. Д., Хранящиеся в куки, поэтому попробуйте следовать этому методу

Перед транзакцией oauth, например, перед созданием веб-просмотра

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

После oauth-транзакции разрешите принимать cookie, установив

cookieManager.setAcceptCookie(true);

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

1 голос
/ 26 февраля 2013

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

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

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

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

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

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

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

Принудительное WebView не запрашивать запоминание паролей также не будет работать.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...