2010-06-27 43 views
1

我的iPhone應用程序有一個UIWebView,用於加載包含設置Cookie的JavaScript的頁面。看來,如果我設置了一個cookie並在10-15秒內退出應用程序,那麼該cookie永遠不會被保存,但是如果我設置了cookie,請等待10-15秒,然後退出該應用程序,cookie將被保存。iPhone應用程序Cookie延遲

任何人都有任何關於爲什麼他們是延遲的信息,以及如何去立即保存cookie。

回答

4

我能夠想出的唯一解決方法是在應用程序終止之前將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]; 
    } 
1

有這個相同的問題。延遲實際上是從我的測試30秒。我失去了幾天試圖調試。可能有辦法通過在30秒過去之前手動重新保存cookie來解決這個問題,但我還沒有嘗試過。

+0

必須有同步的餅乾的方式 – AlBeebe 2011-01-19 14:24:54

+1

有一個[私有API(http://stackoverflow.com/a/10054438/1872297)來做到這一點。 我填寫了rdar:// 13293418([openradar](http://openradar.appspot.com/radar?id=2776403))要求將此API公開;你可以填寫一個副本給它一些重量。 – Kemenaran 2013-02-26 10:01:56