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

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

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

[op setCredentialPersistence:NSURLCredentialPersistenceNone];

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

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

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

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

1 ответ

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

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

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

Другие вопросы по тегам