MKNetworkKit: как очистить кеширование, связанное с аутентификацией

Краткое изложение проблемы: я использую MKNetworkKit и использую Basic Auth для аутентификации на сервере REST. Я не эксперт по настройке деталей на стороне сервера. Все, что я знаю, это то, что потребуется базовая аутентификация без SSL.

Если я аутентифицирую себя с действительным пользователем/паролем, и если я сделаю это во второй раз с каким-то фиктивным вводом, это все равно будет успешным. Я прочитал документацию и попытался сделать это:

[op setCredentialPersistence:NSURLCredentialPersistenceNone];

это не работает. Но если я сделаю это:

[op setCredentialPersistence:NSURLCredentialPersistenceNone];
[op addHeader:@"Cookie" withValue:@""];   // a hunch I tried

потом вроде заработало. Как будто какой-то cookie всегда передается, и сервер принимает его, даже не проверяя заголовок авторизации. Я сделал несколько тестов, в которых я предоставлю вещи в следующем порядке (хорошо, подделка, хорошо) и (подделка, хорошо, подделка), и, похоже, все работает так, как ожидалось.

Теперь, может ли кто-нибудь указать, что если это не так, то где-то должна быть ошибка, либо MKNetworkKit, либо на стороне сервера? Если я установлю NSURLCredentialPersistenceNone, то почему добавление этого заголовка Cookie заставит его работать?? он, должно быть, перезаписал то, что должен был отправить, и вызвал неправильное поведение, и, таким образом, «исправил» его.


person kawingkelvin    schedule 20.12.2013    source источник
comment
Вероятно, сервер добавляет файл cookie сеанса после аутентификации. Попробуйте записать [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] перед запросом и после получения ответа.   -  person Moxy    schedule 21.12.2013


Ответы (1)


Из-за того, что протокол HTTP не имеет состояния, клиенты часто используют файлы cookie для обеспечения постоянного хранения данных по URL-запросам. Система загрузки URL-адресов предоставляет интерфейсы для создания файлов cookie и управления ими, для отправки файлов cookie в составе HTTP-запроса и для получения файлов cookie при интерпретации ответа веб-сервера. OS X и iOS предоставляют класс NSHTTPCookieStorage, который, в свою очередь, предоставляет интерфейс для управления коллекцией объектов NSHTTPCookie. В OS X хранилище файлов cookie совместно используется всеми приложениями; в iOS хранение файлов cookie предназначено для каждого приложения. /10000165-BCICJDHA" rel="nofollow">https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165-BCICJDHA) Как заявил Moxy, попробуйте зарегистрировать файлы cookie [[NSHTTPCookieStorage sharedHTTPCookieStorage]]. Я столкнулся с той же проблемой, и причина заключалась в том, что файлы cookie использовались и поддерживались сервером. Поскольку перенаправление происходило всякий раз, когда я входил в систему, используя учетные данные, которые я проверил запрос и ответ в

  • (NSURLRequest ) соединение: (NSURLConnection) inConnection willSendRequest: (NSURLRequest*) inRequest redirectResponse: (NSURLResponse*) inRedirectResponse

И файлы cookie сохранялись в заголовках. Единственное, что вы можете сделать, это отправить случайный файл cookie для новой сессии.

person nick28    schedule 07.02.2014