2013-02-16 18 views
23

Buduję aplikację na iOS, która korzysta z Google App Engine do obsługi wewnętrznej. Google udostępnia witrynę logowania HTML, która przechowuje plik cookie uwierzytelniający. Jeśli odwiedzę tę witrynę w UIWebView, a użytkownik się zaloguje, czy te pliki cookie będą przechowywane w pamięci, skąd zostaną odebrane przez NSURLConnection podczas wysyłania żądania do tej samej witryny?Czy UIWebView i NSURLConnection udostępniają pliki cookie?

+0

Dzięki. Próbuję znaleźć sposób, aby zadać to pytanie przez około 10 minut. –

+1

@Yar: Cieszę się, że to znalazłeś! – Linuxios

Odpowiedz

22

Plik cookie UIWebView będzie przechowywany w pamięci podręcznej przechowywanej w piaskownicy, dostępnej pod numerem NSHTTPCookieStorage sharedHTTPCookieStorage]. Można użyć tej przechowywanie plików cookie w NSURLConnection w ten sposób:

NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"__YOUR_URL__"]]; 
NSDictionary *headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; 
[request setAllHTTPHeaderFields:headers]; //A previously created NSMutableURLRequest 

Teraz można normalnie używać NSURLRequest w NSURLConnection i wyśle ​​ciasteczka utworzone po zalogowaniu w UIWebView

+0

Czy zastępuję '" YOUR_URL "' adresem URL strony lub domeny? – Linuxios

+0

W twoim przypadku zastąpienie YOUR_URL przez '.google.com' powinno być w porządku, ogólnie to jest adres URL pasujący do pola domeny pliku cookie. Jeśli nie wiesz, jaki jest dokładny adres URL (".google.com" pasuje do wszystkich poddomen google.com), możesz pobrać cały plik cookie w pamięci cookie w następujący sposób: '[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookie]'. Prawdopodobnie serwer po prostu zignoruje ciasteczka (jeśli masz inne), które nie są dla niego. –

+0

Tak więc ".google.com" dotyczy "google.com" i wszystkich subdomen? – Linuxios

Powiązane problemy