2012-01-19 30 views
5

Mam UIWebView, który ładuje stronę internetową, która uwierzytelnia użytkownika. Witryna tworzy plik cookie uwierzytelniania. W przeglądarce, jeśli nie wyczyścisz plików cookie, zawsze będziesz zalogowany. Po załadowaniu xCODE może zobaczyć plik cookie wymieniony podczas przeglądania pliku cookie, ale nie jest wysyłany do webView. Chciałbym wiedzieć, jak uczynić webView świadomym, że plik cookie auth istnieje, aby nie monitował użytkownika o uwierzytelnianie za każdym razem.iOS UIwebView Auth Cookies

Odpowiedz

7

Możesz użyć klasy NSURLConnection, aby wykonać żądanie HTTP, aby zalogować się do witryny i pobrać plik cookie. Aby wykonać żądanie, wystarczy utworzyć instancję NSURLConnection i przypisać do niej obiekt delegowany.

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 

Następnie zaimplementuj metodę przekazania.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response; 
    NSDictionary *fields = [HTTPResponse allHeaderFields]; 
    NSString *cookie = [fields valueForKey:"Set-Cookie"]; // It is your cookie 
} 

Zachowaj lub skopiuj ciąg znaków cookie. Aby wykonać inne żądanie, dodaj je do nagłówka HTTP instancji NSURLRequest.

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
[request addValue:cookie forHTTPHeaderField:"Cookie"]; 

Aby usunąć ciasteczka w każdej chwili można wywołać tej metody:

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    for (NSHTTPCookie *each in [[[cookieStorage cookiesForURL:YOUR_URL] copy] autorelease]) { 
     [cookieStorage deleteCookie:each]; 
    } 
+0

Ok, jestem nowy w Xcode i mam pytania na ten temat. Możesz nazwać mnie imionami, jeśli są zbyt proste. W pliku AppDelegate.m próbuję zadeklarować NSURL i NSURLConnection i dostałem błąd kompilatora o tych nie beign stałych. Wdrożyłem delegata również w AppDelagate.m i to kompiluje. NSMutable Nie mam pojęcia, jaką metodę należy zastosować. Jestem pewien, że to są proste pytania, ale naprawdę nie wiem. – Hector

2

I rozwiązać problem. Problem związany jest z konfiguracją, ponieważ interfejs UIWebView nie jest postrzegany jako standardowa przeglądarka internetowa. Uwierzytelniam użytkownika poprzez .net i IIS. Dodałem plik generic.browser do katalogu App_Browser mojej witryny. Zawartość pliku jest:

<browsers> 
    <browser refID="Mozilla" > 
    <capabilities> 
     <capability name="cookies" value="true" /> 
    </capabilities> 
    </browser> 
    <browser refID="Default"> 
     <capabilities> 
     <capability name="cookies" value="true" /> 
     </capabilities> 
    </browser> 
</browsers> 

Linia, która koryguje kwestią jest zdolność pozwalając cookies.

Odniesienie do rozwiązania kiedyś było to

Asp.Net Forms Authentication when using iPhone UIWebView

4

Można odczytać plik cookie uwierzytelniania z wszystkich stron internetowych za pomocą udostępnionego przechowywanie plików cookie.

NSHTTPCookie *cookie; 

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [cookieJar cookies]) 
{ 
    NSLog(@"%@", cookie); 
} 

lub uzyskać .NET aspxauth cookies na swojej stronie

NSArray *cookiesForURL = [cookieJar cookiesForURL: [NSURL URLWithString: **MYURL**]]; 

for (cookie in cookiesForURL) 
{ 
    if([cookie.name compare:@".ASPXAUTH"] == NSOrderedSame) 
    { 
     NSLog(@"%@", cookie); 
     break; 
    } 
}