¿Cómo eliminar todas las cookies de UIWebView?

91

En mi aplicación, tengo una UIWebviewpágina de autenticación de linkedin que carga para iniciar sesión. Cuando el usuario inicia sesión, las cookies se guardan en la aplicación.

Mi aplicación tiene un botón de cierre de sesión que no está relacionado con el inicio de sesión de LinkedIn. Entonces, cuando el usuario hace clic en este botón, cierra la sesión de la aplicación. Quiero que este cierre de sesión borre sus cookies de LinkedIn también de la aplicación, para que el usuario cierre la sesión por completo.

Vaibhav Saran
fuente

Respuestas:

209

De acuerdo con esta pregunta , puede revisar cada cookie en el "tarro de galletas" y eliminarlas, así:

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
Sergio Moura
fuente
@Felipe Encontró una forma temporal, necesita eliminar las cookies en la carga de la aplicación si cierra la sesión la última vez.
Ishu
@Ishu bueno, sí, eso es exactamente lo que estoy haciendo ahora, pero realmente no responde a la pregunta sobre cómo REALMENTE eliminar las cookies para siempre y no solo para la sesión actual
Felipe Brahm
Elimina las cookies de forma permanente. Cualquier solicitud que se realice después podría resultar en la recreación de las cookies. Además, si desea eliminar las cookies solo para situaciones en las que un usuario está cerrando la sesión, le recomendaría que solo elimine las cookies de sesión, ya que cerrar la sesión es en realidad solo una terminación de la sesión. De lo contrario, perderá la configuración potencial que un usuario desea conservar entre sesiones.
dsingleton
19
Asegúrese de llamar a [[NSUserDefaults standardUserDefaults] synchronize] para asegurarse de que los cambios se guarden en el disco. @felipe, esta es la razón por la que está viendo que las cookies regresan en ejecuciones posteriores.
Yetanotherjosh
Intenté esto, pero el almacenamiento devuelve 0 recuento, lo pruebo en el simulador de iOS 8. Entonces, ¿cómo puedo eliminar las cookies de Facebook en un safari?
Nada Gamal
8

Solo quería agregar información sobre esto.

En OS X 10.9 / iOS 7 y posterior, puede usar -resetWithCompletionHandler: para borrar las cookies y el caché, etc. de toda la aplicación de su sharedSession:

Vacía todas las cookies, cachés y almacenes de credenciales, elimina archivos de disco, vacía las descargas en curso en el disco y garantiza que las solicitudes futuras se produzcan en un nuevo socket.

[[NSURLSession sharedSession] resetWithCompletionHandler:^{
    // Do something once it's done.
}];

El bucle for-In con deleteCookie:suena como modificar mientras me enumera una colección . (No lo sé, ¿podría ser una mala idea?)

Cai
fuente
He utilizado ambos métodos que se ejecutan correctamente, pero sigo encontrando que Google todavía muestra un historial de búsqueda después de todo esto (sin iniciar sesión). ¿Algunas ideas? Gracias
mylogon
¿Afectará esto algún estado de Alamofire y mi consumo de mis API REST de backend? ¿No basa Alamofire su solución en URLSession?
Sajjon
1

Puede hacer una función dentro del html de WebView, que limpie las cookies.

Si necesita que la limpieza se realice solo una vez, puede activar esta función con un evento Titanium, solo cuando se inicia la aplicación.

jack kallis
fuente
1

Si alguien está buscando una solución rápida:

    let storage = HTTPCookieStorage.shared
    if let cookies = storage.cookies{
        for cookie in cookies {
             storage.deleteCookie(cookie)
        }
    }
Saleh Enam Shohag
fuente