Rendre Android WebView pas stocker des cookies ou des mots de passe

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

Je n’ai pas besoin (et ne stocke pas) le mot de passe de l’utilisateur, mais WebView conserve les cookies de Twitter et demande également à l’utilisateur s’il souhaite que le mot de passe soit mémorisé. En conséquence, même après la désautorisation de l’application via sa page de compte Twitter et que mon application détruit les jetons d’access, la prochaine fois que WebView sera ouvert, elle sera probablement toujours connectée et, même si ce n’est pas le cas, elle a la case du mot de passe est déjà remplie.

Comment puis-je forcer WebView à ne pas demander de mémoriser les mots de passe et à ne pas persister les cookies de session? Si ce n’est pas possible, puis-je supprimer tous ses états stockés (sauf peut-être le cache d’image)?

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) 

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.

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

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

Ne supprimez pas les cookies car cela affectera d’autres sessions telles que facebook, etc. stockées dans le cookie. Essayez donc de suivre cette méthode.

Avant la transaction oauth telle qu’avant la création de la vue Web

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

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

 cookieManager.setAcceptCookie(true); 

ça marchera je l’ai testé ..

J’ai utilisé la solution suivante:

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

La méthode suivante n’a pas fonctionné pour moi:

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

Une raison possible est 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 mémoriser les mots de passe ne fonctionnera pas non plus.

Et ce n’est pas bon pour la facilité d’utilisation.