2013-01-17 16 views
9

W: This Question mówi się, że AFNetworking zajmuje się ciasteczkami automatycznie w tle, ale w pytaniu Previous miałem problem z utrzymaniem sesji na serwerze, który został zrobiony w php po zalogowaniu Po zamknięciu (przerwaniu debugowania w Xcode) aplikacja zniknęła. Odpowiedź była taka, aby zachować ciasteczka w taki sposób, aby rozwiązać problem:AFNetworking Trwanie ciastek automatycznie

NSData *cookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"User"]; 
if ([cookiesData length] > 0) { 
    for (NSHTTPCookie *cookie in [NSKeyedUnarchiver cookiesData]) { 
      [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; 
     } 
} 

Daje mi to awarię aplikacji, gdy próbuję zrobić coś takiego. Po zalogowaniu ustawiam NSUserDefault tak:

[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"User"]; 
//Then synthesize 

Czy to niewłaściwy sposób użycia tego? Czy NSHTTPCookieStorage jest moim problemem? Dzięki.

Odpowiedz

36

korzystać z następujących, to jest poprawny sposób, aby zapisać i ciasteczka obciążenia, które działa dla mnie:

- (void)saveCookies{ 

    NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject: cookiesData forKey: @"sessionCookies"]; 
    [defaults synchronize]; 

} 

- (void)loadCookies{ 

    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"sessionCookies"]]; 
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 

    for (NSHTTPCookie *cookie in cookies){ 
     [cookieStorage setCookie: cookie]; 
    } 

} 

Nadzieję, że to pomaga!

+1

Pamiętając o przechowywaniu ciasteczek sesyjnych w 'NSUserDefaults' to straszny pomysł, ponieważ jest przechowywany w postaci niezaszyfrowanej w obszarze izolowanym aplikacji. Rozważ użycie Keychain zamiast – jackslash

+1

Wygląda na to, że jest równie bezpieczny, jak przechowywanie ich w przeglądarce ... Czy coś mi brakuje? – Gazzini

+0

Z jakiegoś powodu nie mogę tego uruchomić. Powoduje awarię, mimo że ciasteczka analizowane w [self loadCookies] wydają się poprawne. "NSInvalidArgumentException", powód: "- [__ NSCFDictionary objectAtIndexedSubscript:]: nierozpoznany selektor wysłany do instancji –