代码之家  ›  专栏  ›  技术社区  ›  AlBeebe

iPhone应用程序cookie延迟

  •  1
  • AlBeebe  · 技术社区  · 16 年前

    我的iPhone应用程序有一个uiWebView,它加载一个包含设置cookie的javascript的页面。如果我设置了一个cookie并在10-15秒内退出应用程序,那么cookie就永远不会被保存,但是如果我设置了cookie,请等待10-15秒,然后退出应用程序,cookie就会被保存。

    任何人都知道他们为什么会延迟,以及如何立即保存cookies。

    2 回复  |  直到 15 年前
        1
  •  4
  •   AlBeebe    15 年前

    我唯一能想到的解决方法是在应用程序终止之前将cookie保存到用户默认值。打开应用程序后,查看用户默认值,取出cookie,并将其重写到cookie存储中。它可以工作,但是如果你的应用程序被强制终止,那么它就不是真的。

    - (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];
       }
    
        2
  •  1
  •   Will    15 年前

    有同样的问题。延迟实际上是从我的测试开始的30秒。我花了几天时间调试这个。可能有一种方法可以解决这个问题,方法是在30秒过去之前手动重新保存cookie,但我还没有尝试过。