web-dev-qa-db-ja.com

Make Android WebViewはCookieまたはパスワードを保存しません

Twitter OAuthのAndroid WebView を使用します:Twitterはユーザーにログインしてアプリケーションを承認するように要求し、アクセストークンを取得してアプリケーションに保持します。

ユーザーパスワードを保存する必要はありません(保存しません)が、WebViewはTwitterのCookieを保持し、ユーザーにパスワードを記憶させたいかどうかを尋ねます。この結果、Twitterアカウントページを介してアプリケーションの認証を解除し、アプリケーションがアクセストークンを破棄した後でも、WebViewを次に開いたときに、おそらくログインしています。パスワードボックスはすでに入力されています。

WebViewにパスワードの記憶を要求せず、セッションCookieを保持しないようにするにはどうすればよいですか?それが不可能な場合、保存されているすべての状態を削除できますか(画像キャッシュを除く)。

60
Thilo

これを使用して、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)
94
Cassio Landim

パスワードを保存しない場合:

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

クッキーの場合:

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

クッキーの実装についてはよくわかりません。

32
mudit

1行で、これを試してください。これは、webviewの起動後に呼び出す必要があると思います。

Android.webkit.CookieManager.getInstance().removeAllCookie();
10
neo

これは私がこの文脈で見た最高の答えです

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

Cookie内に保存されているFacebookなどの他のセッションに影響を与えるため、Cookieをクリアしないでください。この方法に従うようにしてください。

Before oauth webview作成前などのトランザクション

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

oauthトランザクションが設定によりCookieを受け入れるようにした後

cookieManager.setAcceptCookie(true);

動作します。テストしました。

2
Nivin Raj

私は次のソリューションを使用しました:

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

次の方法はうまくいきません:

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

考えられる理由は、次のようにCookieを同期していないことです。

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

しかし、時間がかかる場合があります。

WebViewにパスワードの記憶を要求しないように強制しても機能しません。

また、使い勝手も良くありません。

1
Sachin Gupta