2013-09-01 4 views
10

Qualcuno può mostrarmi come salvare i cookie PER SEMPRE utilizzando AFNetworking per iOS? Sto usando iOS7, ma penso che questo non dovrebbe importare?Come utilizzare AFNetworking per salvare i cookie permanentemente per sempre, fino a quando l'app non viene cancellata da iPhone?

Il caso d'uso è che in caso di autenticazione con successo con un servizio web, mi dà due cookie che ho bisogno di passare con ogni singola richiesta. Questi cookie non scadono mai o scadono da anni. Finché dispongo dei cookie con ogni richiesta HTTPS, l'utente non deve effettuare nuovamente il login. Comprendo che AFNetworking persiste automaticamente i cookie finché non esci dall'app, ma ho bisogno che i cookie durino in eterno finché l'utente non cancella l'app dal proprio telefono.

1) In caso di autenticazione avvenuta con successo, il webservice mi fornisce due cookie. Come posso accedervi? Vado direttamente allo storage NSHTTPCookie e prendo il cookie con il suo nome, oppure esiste un "modo" AFNetworking per farlo?

2) Come faccio a salvare questi due cookie magici in modo permanente in modo che la sottoclasse di AFHTTPClient trasmetta questi due cookie magici insieme a ciascuna richiesta? Li ho appena salvati all'interno di un portachiavi o NSUserDefaults o NSURLCredentialsStorage? O ancora c'è un modo AFNetworking per fare questo? Ho letto di un metodo setAuthorization() all'interno di AFNetworking ma non sono sicuro che questo si applichi anche a username/password e cookie.

3) Come si eliminano questi cookie nel modo AFNetworking?

Grazie !!

risposta

18

AFNetworking non fa nulla esplicitamente con i cookie, quindi non c'è "AFNetworking way" di trattare con i cookie. Lavorerai con NSHTTPCookie e NSHTTPCookieStorage.

Nei miei progetti non ho avuto bisogno di fare qualcosa di specifico alle richieste per farle funzionare con i cookie. Se è necessario un comportamento di richiesta diverso da AFNetworking fornito per impostazione predefinita, si esegue l'override di requestWithMethod:path:parameters: nella sottoclasse AFHTTPClient.

  1. per ottenere il cookie restituiti da un AFJSONRequest, ad esempio

    NSURLRequest* request = <some request returned from your AFHTTPClient subclass> 
    AFJSONRequestOperation* op = [AFJSONRequestOperation JSONRequestOperationWithRequest:request 
    success:^(NSURLRequest* request, NSHTTPURLResponse* response, id userData) { 
        NSArray* cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:url]; 
    } 
    failure:... 
    
  2. This answer dice di impostare una data di scadenza sul cookie. Se si desidera mantenere i cookie da soli, è possibile convertire i cookie in un dizionario e salvarli. This answer dice di usare il portachiavi.

    NSMutableDictionary* cookieDictionary = [NSMutableDictionary dictionaryWithDictionary:cookiePrefs]; 
    for (NSHTTPCookie* cookie in cookies) { 
        [cookieDictionary setValue:cookie.properties forKey:cookie.name]; 
    } 
    
  3. Rimuovere i cookie dal NSHTTPCookieStorage. Ci sono alcuni trickiness a cui prestare attenzione. Se hai salvato i cookie da solo, elimina i valori memorizzati, tuttavia è appropriato.

    NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:theUrl]; 
    for (NSHTTPCookie* cookie in cookies) { 
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; 
    } 
    
Problemi correlati