2010-06-27 3 views
1

Mon application iPhone a un UIWebView qui charge une page contenant javascript qui définit un cookie. Il semble que si je mets un cookie et quitte l'application dans les 10-15 secondes, le cookie n'est jamais enregistré, mais si je mets le cookie, attendez 10-15 secondes puis quittez l'application, le cookie est enregistré.iPhone App Cookie Delay

Tout le monde a des informations sur les raisons pour lesquelles il y a un retard et comment faire pour que les cookies soient sauvegardés immédiatement.

Répondre

4

La seule solution de contournement que j'ai pu proposer est d'enregistrer les cookies aux valeurs par défaut de l'utilisateur juste avant la fin de l'application. Lorsque l'application est ouverte, passez en revue les paramètres par défaut de l'utilisateur, sortez les cookies et réécrivez-les dans le stockage des cookies. Cela fonctionne mais si votre application est résolue avec force, alors ce n'est pas vraiment le cas.

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
    cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    [cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 

    // Load the saved cookies 
    NSDate *currentDate = [NSDate date]; 
    NSTimeInterval expirationAmount = 5 * 365 * 24 * 60 * 60; 
    NSDate *expirationDate = [currentDate dateByAddingTimeInterval:expirationAmount]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    for (id theKey in [defaults dictionaryRepresentation]) { 
     if ([theKey hasPrefix:@"cookie:"]) { 
      [self setCookie:[theKey substringFromIndex:7] value:[defaults objectForKey:theKey] expiration:[expirationDate description] domain:urlDomain]; 
     } 
    } 
} 

- (void)applicationWillTerminate:(UIApplication *)application { 
    // Save the cookies to the user defaults 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSArray* theCookies = [cookieStorage cookies]; 
for(NSHTTPCookie *myStr in theCookies) { 
    [defaults setValue:[myStr value] forKey:[NSString stringWithFormat:@"cookie:%@", [myStr name]]]; 
    } 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
1

Avoir ce même problème. Le délai est en fait de 30 secondes exactement à partir de mes tests. J'ai perdu quelques jours en essayant de déboguer ça. Il existe peut-être un moyen de contourner ce problème en réenregistrant manuellement les cookies avant la fin des 30 secondes, mais je n'ai pas encore essayé.

+0

Il doit y avoir un moyen de synchroniser les biscuits – AlBeebe

+1

Il y a une [API privée] (http://stackoverflow.com/a/10054438/1872297) de le faire. J'ai rempli rdar: // 13293418 ([openradar] (http://openradar.appspot.com/radar?id=2776403)) pour demander que cette API soit rendue publique; vous pouvez remplir un double pour lui donner du poids. – Kemenaran