web-dev-qa-db-fra.com

Faire Android WebView ne stocke pas les cookies ou les mots de passe

J'utilise un Android WebView pour Twitter OAuth : Twitter demande à l'utilisateur de se connecter et d'autoriser l'application, je récupère le jeton d'accès et le persiste dans mon application.

Je n'ai pas besoin (et je ne stocke pas) le mot de passe de l'utilisateur, mais WebView conserve les cookies de Twitter et il demande également à l'utilisateur s'il souhaite qu'il se souvienne du mot de passe. En conséquence, même après que la demande a été retirée de l'autorisation via sa page de compte Twitter, et que mon application détruit les jetons d'accès, la prochaine fois que WebView sera ouverte, elle sera probablement toujours connectée, et même si ce n'est pas le cas, elle a la boîte de mot de passe déjà remplie.

Comment puis-je forcer WebView à ne pas demander de se souvenir des mots de passe et à ne pas conserver les cookies de session? Si ce n'est pas possible, puis-je supprimer tout son état stocké (sauf peut-être le cache d'image)?

60
Thilo

Vous pouvez l'utiliser pour empêcher le stockage des cookies et nettoyer les cookies déjà stockés:

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

Pour ne pas enregistrer les mots de passe:

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

Pour les cookies:

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

Je ne suis pas très sûr de l'implémentation des cookies.

32
mudit

En une ligne, essayez ceci. Je pense que cela devrait être appelé après le démarrage de la vue Web.

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

C'est la meilleure réponse que j'ai vue dans ce contexte

    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

N'effacez pas les cookies car cela affectera d'autres sessions comme Facebook, etc. stockées à l'intérieur du cookie, essayez donc de suivre cette méthode

Avant oauth transaction comme avant la création de la vue Web

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

Après oauth transaction laissez accepter le cookie en définissant

cookieManager.setAcceptCookie(true);

ça marchera je l'ai testé ..

2
Nivin Raj

J'ai utilisé la solution suivante:

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

La méthode suivante ne fonctionne pas pour moi:

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

Une raison possible peut être que nous n'avons pas synchronisé les cookies comme suit:

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

Mais cela peut prendre du temps.

Forcer WebView à ne pas demander de se souvenir des mots de passe ne fonctionnera pas non plus.

Et ce n'est pas non plus bon pour la convivialité.

1
Sachin Gupta