NSURLConnection проблема очистки и повторного подключения кеша - PullRequest
1 голос
/ 09 сентября 2010

Имеется приложение rails, которое связывается с моим приложением ipad. Я использую асинхронное соединение с HTTP-аутентификацией. И я хотел бы проверить полномочия, если они в порядке. Проблема в том, что если я ввожу хорошие учетные данные и после этого меняю неправильные, соединение все равно принимает. Отказывается только при повторном открытии приложения. Может быть, проблема с кэшированием, я попытался очистить кеш также на ipad.

Инициализация соединения.

 NSURLRequest *request =
[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost:3000"] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60.0];
[NSURLConnection connectionWithRequest:request delegate:self];

также реализовал метод willcacheresponse

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse {
return nil;
}

1 Ответ

2 голосов
/ 25 октября 2010

Вам случается кэшировать кэш учетных данных?Если нет, вы можете пренебречь всем следующим:)

Я не знаю, какой режим аутентификации вы выбираете, здесь у меня есть пример использования режима аутентификации Windows в моем приложении для iphone.Когда на стороне сервера возникают проблемы со стороны клиента, мое приложение отправит обратно объект NSURLCredential:

NSURLCredential* credential = [NSURLCredential credentialWithUser:login password:password persistence:NSURLCredentialPersistenceForSession];

Здесь вы можете увидеть параметр NSURLCredentialPersistenceForSession, следующее описание:

typedef enum {
 NSURLCredentialPersistenceNone,       // Credential won't be stored.
 NSURLCredentialPersistenceForSession, // Credential will be stored only for this session.
 NSURLCredentialPersistencePermanent   // Credential will be stored in the user’s keychain and shared with other applications.
} NSURLCredentialPersistence;  

Как вы можетевидите, если вы используете NSURLCredentialPersistenceForSession cre учетные данные будут кэшированы, а соединение обратного вызова: didReceiveAuthenticationChallenge: никогда не будет вызываться, когда сервер вызывает клиента, если вы не очистите его в NSURLCredentialStorage.Так что это делает ваши изменения учетных данных бесполезными.Вы можете использовать NSURLCredentialPersistenceNone, чтобы отключить кеш или очистить кеш при необходимости.

...