Сделать Android WebView не хранить куки или пароли
Я использую Android WebView для Twitter OAuth: Twitter просит пользователя войти в систему и авторизовать приложение, я получаю маркер доступа и сохраняю его в своем приложении.
Мне не нужно (и не нужно) хранить пароль пользователя, но WebView хранит файлы cookie Twitter, а также спрашивает пользователя, хочет ли он запомнить пароль. В результате этого даже после деавторизации приложения через его страницу учетной записи Twitter и мое приложение уничтожает маркеры доступа, в следующий раз, когда открывается WebView, он, вероятно, все еще входит в систему, и даже если нет, у него уже заполнено поле пароля.
Как я могу заставить WebView не запрашивать запоминание паролей и не сохранять файлы cookie сеанса? Если это невозможно, могу ли я удалить все его сохраненное состояние (за исключением, возможно, кэша изображений)?
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
не попросить запомнить пароли тоже не получится.и это также не хорошо для удобства использования.