2012-06-11 19 views
54

Jak wskazuje tytuł, używam AFNetworking w projekcie iOS, w którym aplikacja komunikuje się z serwerem. Gdy użytkownik się zaloguje, serwer odpowiada, wysyłając flagę sukcesu, a nagłówki odpowiedzi zawierają identyfikator sesji.Jak zarządzać sesjami za pomocą AFNetworking?

Zastanawiam się, czy AFNetworking automatycznie wysyła identyfikator sesji z każdym następnym żądaniem, czy też powinienem w jakikolwiek sposób się tym zająć?

Dla informacji, nie mam kontroli nad zapleczem w zakresie sposobu uwierzytelniania wniosków. Buduję tylko klienta, który rozmawia z serwerem.

Odpowiedz

114

Tak, ID sesji powinny być wysyłane automatycznie po zalogowaniu się, dopóki ciasteczko nie wygaśnie przed kolejna prośba zostanie wysłana (ważny szczegół, aby mieć pewność). NSURLConnection, z którego korzysta AFNetworking, dba o szczegóły.

Na zapleczu AFNetworking korzysta z NSURLConnection, który z kolei automatycznie aktualizuje NSHTTPCookieStorage, aby zapisać sesję. Możesz manipulować lub usuwać pliki cookie według własnego uznania, bawiąc się z pamięcią cookie.

Jeśli chcesz się zalogować do usługi jako niezalogowany, możesz po prostu usunąć plik cookie sesji powiązany z daną domeną. Niektóre usługi, z którymi współpracowałem, będą generować błędy, jeśli jesteś już zalogowany i spróbujesz zalogować się ponownie. Dodatkowo nie było możliwości sprawdzenia statusu logowania. Szybka poprawka, dostać ciasteczka z URL i usunąć je:

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

From the developer himself

+0

W przypadku głosowania w dół proszę zostawić odpowiedź, dlaczego moja odpowiedź jest nieprawidłowa. –

+2

Doceniam twoją odpowiedź i nie głosowałem na twoją odpowiedź. –

+0

To również było moje wrażenie, a to wyjaśnia niektóre aspekty działania AFNetworking i NSURLConnection. Dzięki za odpowiedź. –

4

Zależy to od specyfikacji podanej przez serwis, z którym użytkownik korzysta. Pracowałem z podobnymi usługami i wyraźnie stwierdzili w swojej dokumentacji, że Aby utrzymać ważność sesji, muszę sondować usługę co kilka sekund, przesyłając int "1".

Jednak, o ile to możliwe, można opublikować nazwę usługi lub dowolne odniesienie, które możemy przeczytać. Jeśli jest to prywatny interfejs dowolnej firmy, musiał opisać użycie identyfikatora sesji, który zwracają.


Będą się nimi zajmować podstawowe technologie, ale jeśli chcesz zachować te pliki cookie, odpowiedz na inne pytanie.

Persisting Cookies In An iOS Application?

+0

Dziękuję za odpowiedź. To rzeczywiście prywatny interfejs API i jest oparty na sesji. Moje pytanie brzmi tak, jak sesje są zarządzane przez AFNetworking lub sam system iOS. Jeśli otrzymam plik cookie z identyfikatorem sesji, czy jest on automatycznie wysyłany z każdym następnym żądaniem do momentu wygaśnięcia sesji? To są takie pytania, na które chciałbym znać odpowiedź. –

+0

Hej Bart, właśnie zaktualizowałem swoją odpowiedź. Okazuje się, że obsługa plików cookie odbywa się za pomocą podstawowych technologii i nie musimy się tym martwić. – doNotCheckMyBlog

+0

Co do cholery? Downvoters zapisz, dlaczego uważasz, że to zła odpowiedź? – doNotCheckMyBlog

Powiązane problemy