Файлы cookie для аутентификации iOS UIwebView - PullRequest
5 голосов
/ 19 января 2012

У меня есть UIWebView, который загружает веб-сайт с аутентификацией пользователя. Сайт создает файл cookie аутентификации. Если в браузере вы не удалите файлы cookie, вы всегда будете входить в систему. Когда загружается xCODE, он может видеть список файлов cookie при просмотре файла cookie, но он не отправляется в веб-представление. Я хотел бы знать, как сделать webView осведомленным о том, что есть cookie-файл аутентификации, чтобы он не продолжал каждый раз запрашивать у пользователя аутентификацию.

Ответы [ 3 ]

7 голосов
/ 19 января 2012

Вы можете использовать класс NSURLConnection для выполнения HTTP-запроса на вход в систему на веб-сайте и получение файла cookie.Чтобы выполнить запрос, просто создайте экземпляр NSURLConnection и назначьте ему объект делегата.

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

Затем реализуйте метод делегата.

- (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
}

Сохраните или скопируйте строку cookie,Если вы хотите выполнить другой запрос, добавьте его в заголовок HTTP своего экземпляра NSURLRequest.

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

Чтобы удалить Cookie в любое время, вы можете вызвать этот метод:

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (NSHTTPCookie *each in [[[cookieStorage cookiesForURL:YOUR_URL] copy] autorelease]) {
        [cookieStorage deleteCookie:each];
    }
4 голосов
/ 11 июля 2013

Вы можете прочитать куки аутентификации со всех сайтов, используя общее хранилище куки.

NSHTTPCookie *cookie;

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

ИЛИ для получения файла cookie .net aspxauth для вашего сайта

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

for (cookie in cookiesForURL)
{
    if([cookie.name compare:@".ASPXAUTH"] == NSOrderedSame)
    {
        NSLog(@"%@", cookie);
        break;
    }
}
2 голосов
/ 20 января 2012

Я решил проблему. Проблема связана с конфигурацией, поскольку UIWebView не рассматривается как стандартный веб-браузер. Я аутентифицирую пользователя через .net и IIS. Я добавил файл generic.browser в каталог App_Browser моего веб-сайта. Содержимое файла:

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

Строка, исправляющая проблему, - это возможность , разрешающая использование файлов cookie.

Ссылка на решение, которое я использовал, была такой

Аутентификация Asp.Net Forms при использовании iPhone UIWebView

...