2011-03-23 18 views
59

Uso un Android WebView for Twitter OAuth: Twitter solicita al usuario que inicie sesión y autorice la aplicación, recupero el token de acceso y lo conservo en mi aplicación.Hacer que Android WebView no almacene cookies o contraseñas

No necesito (y no) almacenar la contraseña del usuario, pero WebView mantiene las cookies de Twitter, y también le pregunta al usuario si quiere que recuerde la contraseña. Como resultado de esto, incluso después de que se desautoriza la aplicación a través de su página de cuenta de Twitter, y mi aplicación destruye los tokens de acceso, la próxima vez que se abra WebView, es probable que todavía esté conectado, y aunque no lo esté, tiene el cuadro de contraseña ya está lleno

¿Cómo puedo obligar a WebView a no recordar las contraseñas y no conservar las cookies de sesión? Si eso no es posible, ¿puedo eliminar todo su estado almacenado (excepto tal vez el caché de imágenes)?

+0

Se puede marcar la respuesta como correcta, por favor? –

Respuesta

92

Usted puede usar esto para evitar el almacenamiento de cookies y limpiar cookies ya almacenados:

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) 
+1

¡esta es la mejor respuesta que funcionó para mí! –

+1

Funcionó para mí cuando quiero cerrar sesión exitosamente en Twitter que usa WebView. Gracias. :) –

+1

¿Esto no borrará las cookies cuando se ejecuten las 3 líneas? No impide que las cookies se almacenen. Eso requeriría algo como 'cookieManager.setAcceptCookie (false)'. Dicho esto, esto responde mi pregunta de cómo borrar las cookies, así que gracias. –

31

Para no guardar contraseñas:

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

Para las galletas:

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

No estoy muy seguro de la aplicación cookies.

+6

Establecer setSaveFormData (falso) también ayudará. – Karan

+0

@mudit, No es necesario crear una instancia separada de 'WebSettings'. También puedes hacer esto. 'WebView webView = new WebView (this);' 'webView.getSettings.setSavePassword (false);' – KULKING

+0

Tenga cuidado con la función '.setSavePassword' ya que está en desuso para la versión 4.4 y superior: http: // stackoverflow. com/a/19361928/62921 En esa versión, será falso de manera predeterminada y la ventana emergente no aparecerá. – ForceMagic

2

he utilizado siguiente solución:

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

siguiente método no funcionó para mí:

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

Una posible razón puede ser que no hayamos sincronizado las cookies de la siguiente manera:

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

Pero puede llevar tiempo.

Forzar WebView para no solicitar recordar las contraseñas tampoco funcionará.

Y tampoco es bueno para la usabilidad.

10

En una línea, prueba esto. Creo que esto debería llamarse después de comenzar la vista web.

android.webkit.CookieManager.getInstance().removeAllCookie(); 
+1

funcionó para mí, corto y simple –

2

No te eliminar cookies pd, efectuarán otras sesiones como facebook, etc .. almacenados dentro de la cookie para tratar de seguir este método

Antes de transacción oauth como antes de la creación vistaweb

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

Después de transacción oauth vamos a aceptar cookies configurando

cookieManager.setAcceptCookie(true); 

funcionará lo he probado ...

8

esta es la mejor respuesta que he visto en este contexto

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

El código en el 'else' es lo que funcionó para mí. – b85411

Cuestiones relacionadas