2011-01-04 21 views
50

Ho intenzione di utilizzare NSHTTPCookieStorage in un'app iOS per gestire i cookie recuperati da un URL e sono consapevole che gestirà i cookie durante il runtime dell'applicazione. Tuttavia, mi chiedevo se è possibile mantenere i cookie dopo che l'applicazione è stata chiusa. E poi leggere nuovamente quei cookie quando l'app viene riaperta. Il NSHTTPCookieStorage mantiene i cookie tra le applicazioni? O solo durante il runtime delle applicazioni? Devo usare CoreData per mantenere questi cookie? `Cookie persistenti in un'applicazione iOS?

risposta

44

È necessario reimpostare i cookie quando viene caricata l'app. Io uso un codice come questo:

NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:@"MySavedCookies"]; 
if([cookiesdata length]) { 
    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata]; 
    NSHTTPCookie *cookie; 

    for (cookie in cookies) { 
     [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; 
    } 
} 

e funziona bene.

+2

È già presente "MySavedCookies"? O devo memorizzarlo quando la mia app sta per diventare inattiva? – Alex

+1

Devi salvarlo da solo - È solo il posto dove salvo il mio. – Magnus

+3

La memorizzazione dei cookie nelle impostazioni predefinite dell'utente può essere un difetto di sicurezza poiché tutti i plist sono accessibili tramite strumenti come iFunBox, ecc. Dovrebbero essere crittografati, ma il miglior comportamento è seguire la risposta @gazreese. –

103

Non è necessario che i cookie persistano come suggerito nell'altra risposta. NSHTTPCookieStorage persisterà per te i cookie ma è necessario assicurarsi che i cookie abbiano una data di scadenza impostata sul lato server.

I cookie senza una data di scadenza sono considerati "solo sessione" e verranno cancellati al riavvio dell'app. È possibile verificare la situazione di "solo sessione" tramite una proprietà BOOL in NSHTTPCookie. Questa è roba standard per i cookie e non qualcosa di specifico per iOS.

+0

Sono venuto qui cercando questa chiarezza, grazie. Interessante è che viene cancellato quando l'app viene riavviata. Puoi riavviare Chrome sul desktop e avere ancora una sessione aperta. – Dan2552

+0

+1 Capisco ora perché i miei cookie non ci sono più :). Grazie !! – Niko

+0

Mi hai risparmiato un sacco di tempo! Grazie! –