2012-06-11 3 views
54

Come suggerisce il titolo, sto utilizzando AFNetworking in un progetto iOS in cui l'applicazione parla con un server. Quando l'utente esegue l'accesso, il server risponde inviando un contrassegno di successo e le intestazioni di risposta contengono l'ID di sessione.Come gestire le sessioni con AFNetworking?

Mi chiedo se AFNetworking invia automaticamente l'ID di sessione con ogni richiesta successiva o dovrei prendermi cura di me stesso in qualche modo?

Per vostra informazione, non ho alcun controllo sul back-end in termini di modalità di autenticazione delle richieste. Sto solo costruendo un client che parla al server.

risposta

114

Sì, il vostro ID di sessione devono essere inviate automaticamente una volta effettuato l'accesso, a patto che il cookie non scade prima che la richiesta successiva viene inviata (dettaglio importante per essere sicuri di). NSURLConnection, che AFNetworking utilizza, si prende cura dei dettagli per questo per voi.

Sul backend AFNetworking utilizza NSURLConnection che a sua volta aggiorna automaticamente NSHTTPCookieStorage per memorizzare la sessione. Puoi manipolare o eliminare i cookie come ritieni facendo confusione con la memorizzazione dei cookie.

Come se volessi apparire al servizio come non connesso, potresti semplicemente eliminare il cookie di sessione associato a quel dominio. Alcuni servizi con cui ho lavorato si sbaglieranno se hai già effettuato l'accesso e tenti di accedere nuovamente. Inoltre, non c'era modo di controllare lo stato di accesso. soluzione rapida, ottenere i biscotti da URL ed eliminarli:

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

From the developer himself

+0

Se non si è votati, si prega di lasciare una risposta sul motivo per cui la mia risposta non è corretta. –

+2

Apprezzo la tua risposta e non ho votato la tua risposta. –

+0

Questa è stata anche la mia impressione e questo chiarisce alcuni aspetti di come funzionano AFNetworking e NSURLConnection. Grazie per la tua risposta. –

4

Questo dipende dalle specifiche fornite dal servizio con cui si sta interagendo. Ho lavorato con servizi simili e hanno dichiarato esplicitamente nella loro documentazione che, per mantenere valida la sessione, devo eseguire il polling del servizio ogni pochi secondi inviando "1" int.

Tuttavia, se possibile, si prega di inviare il nome del servizio o qualsiasi riferimento che possiamo leggere. Se si tratta di API private di un'azienda, devono aver descritto l'utilizzo dell'ID di sessione che stanno restituendo.


Le tecnologie sottostanti si prenderanno cura di esso, Tuttavia se si desidera mantenere tali cookie, questa risposta per altre domande.

Persisting Cookies In An iOS Application?

+0

Grazie per la risposta. In effetti è un'API privata ed è basata sulle sessioni. La mia domanda è in realtà come le sessioni sono gestite da AFNetworking o da iOS stesso. Se ricevo un cookie con un ID di sessione, viene automaticamente inviato con ogni richiesta successiva fino alla scadenza della sessione? Sono domande come queste che vorrei conoscere la risposta di. –

+0

Hey Bart, ho appena aggiornato la mia risposta. Si scopre che sì la gestione dei cookie è fatta da tecnologie sottostanti e non dobbiamo preoccuparcene. – doNotCheckMyBlog

+0

Che diavolo? Downvoters annota perché pensi che questa sia una risposta sbagliata? – doNotCheckMyBlog