Aux prises avec ce problème et de la réticence à mettre en œuvre un cookie personnalisé système de gestion.
Il semble que certaines caché niveau de iOS mise en œuvre du protocole HTTP ne parvient pas à gérer sessionless les cookies correctement. Tout moment une réponse HTTP définit ou supprime un cookie, inspection immédiate de NSHTTPCookieStorage cookies donnera les résultats escomptés et indiquer le bon sessionOnly valeur.
Mais si l'application se ferme peu de temps après la réponse des mises à jour de cookies, à relancer ceux sessionOnly=FALSE cookies seront remis pour certaines à l'état précédent et les plus récentes mises à jour de perdu.
Si les cookies sont définis/supprimé par un en-tête de réponse ou NSHTTPCookieStorage setCookie: ne fait aucune différence.
Certains de cache et de la synchronisation de voodoo doit être passe derrière les coulisses. Le temps qu'il faut pour que le cookie devenir persistante peut être jusqu'à 5 secondes.
Toute PERSONNE qui a ou peut pointer vers une explication définitive de ce problème? Est-ce un bug, clair et simple? Ou certaines fonctions non documentées dont le but, je ne peux pas comprendre?
Un peu de code que vous pouvez utiliser pour reproduire:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
NSHTTPCookie *cookie;
for (cookie in [NSHTTPCookieStorage sharedHTTPCookieStorage].cookies) {
NSLog(@"%@=%@", cookie.name, cookie.value);
}
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[cookieProperties setObject:@"testCookie" forKey:NSHTTPCookieName];
[cookieProperties setObject:[NSString stringWithFormat:@"%f", [[NSDate date] timeIntervalSince1970]] forKey:NSHTTPCookieValue];
[cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieOriginURL];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
// set expiration to one month from now
[cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:2629743] forKey:NSHTTPCookieExpires];
cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
Ce code doit produire une nouvelle valeur à chaque lancement. Au lieu de cela, vous verrez que si vous quittez l'application rapidement la valeur est inchangée.
Certains peut-être liées à un débordement de pile questions:
iphone NSHTTPCookieStorage disponible sur l'app rouvrir?
iPhone: NSHTTPCookie n'est pas enregistré d'application redémarre
NSHTTPCookies refuser d'être supprimé
supprimé NSHTTPCookie retourne si l'application est terminée