ios - historial - habilitar y deshabilitar cookies en chrome
Entendiendo la política de aceptación de cookies de iOS (2)
Los documentos de Apple sobre la política de aceptación de cookies para NSHTTPCookieStorage son confusos.
Esto es lo que dicen los documentos:
NSHTTPCookieStorage implementa un objeto singleton (instancia compartida) que administra el almacenamiento de cookies. Cada cookie está representada por una instancia de la clase NSHTTPCookie. Como regla general, las cookies se comparten entre todas las aplicaciones y se mantienen sincronizadas a través de los límites del proceso. Las cookies de sesión (donde el método isSessionOnly del objeto de cookie devuelve SÍ) son locales a un solo proceso y no se comparten.
Nota para iOS: las cookies no se comparten entre aplicaciones en iOS.
Nota: los cambios realizados en la política de aceptación de cookies afectan a todas las aplicaciones actualmente en ejecución que utilizan el almacenamiento de cookies.
Y lo siguiente sobre - (void) setCookieAcceptPolicy: (NSHTTPCookieAcceptPolicy) aPolicy
La política de aceptación de cookies predeterminada es NSHTTPCookieAcceptPolicyAlways. El cambio de la política de cookies afecta a todas las aplicaciones actualmente en ejecución que utilizan el almacenamiento de cookies.
Ahora, lo primero que pensé fue que si una aplicación llamaba a setCookieAcceptPolicy, el cambio afectaría a otras aplicaciones en ejecución. Esto no parece ser el caso. Llamar a setCookieAcceptPolicy solo afectará a la aplicación que lo llamó.
La única política de cookies que se aplica a todas las aplicaciones en ejecución es la de Safari. En iOS 7 antes de que una aplicación llame a setCookieAcceptPolicy, usa la política de safari. Entonces, si la política de cookies de safari está configurada para bloquearse siempre, cualquier aplicación no podrá usarlas hasta que establezca su propia política de cookies. Entiendo que esto ha causado problemas en muchas aplicaciones desde que salió iOS 7.
¿Mi observación es correcta sobre todo esto, o me he perdido algo?
Editar
He levantado un error con Apple y espero escuchar de ellos ahora.
He ejecutado algunas pruebas en mi aplicación y descubrí que en iOS 7, la política de cookies predeterminada para las aplicaciones está establecida en la política de cookies de Safari. Cambiar la política de cookies en Safari, matar y luego reiniciar mis aplicaciones, también cambiaría la política de cookies en mis aplicaciones. Agregando la siguiente línea a cada una de mis aplicaciones:
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
Cambiaría mis aplicaciones en consecuencia, pero no tendría ningún efecto en Safari. Además, cambiar una aplicación no parece afectar a ninguna otra de mis aplicaciones.
Su observación parece mantenerse en 8.4 también Afortunadamente, a partir de 7.0 se puede cambiar por sesión:
NSURLSessionConfiguration *configObject = [NSURLSessionConfiguration ephemeralSessionConfiguration];
if(configObject.HTTPCookieAcceptPolicy != NSHTTPCookieAcceptPolicyAlways) {
NSLog(@"default cookie accept policy was %lu", (unsigned long)configObject.HTTPCookieAcceptPolicy );
configObject.HTTPCookieAcceptPolicy = NSHTTPCookieAcceptPolicyAlways;
}
Además, el valor predeterminado en 9.0 parece ser NSHTTPCookieAcceptPolicySiempre, para que no golpees ese "si" (en caso de que quieras marcar la función en el informe de errores de Apple, cierra el problema aquí también)
En 8.4 obtengo NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain, al menos en una sesión efímera. La política de cookies de Safari en mi caso es "Permitir desde los sitios web que visito". No cambiarlo tan sutilmente a "Permitir solo desde el sitio web actual" produce el mismo NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain. al igual que lo establece en "Bloquear Siempre". La conclusión es que en ios 8, el valor predeterminado es diferente de ios 9 y no parece verse afectado por el selector de políticas de cookies de safari.