2010-09-09 2 views
1

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

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

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

ответ

2

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

Я не знаю, какой режим аутентификации вы выберете, здесь у меня есть образец с использованием режима проверки подлинности 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, учетные данные будут кэшироваться, а соединение обратного вызова: didReceiveAuthenticationChallenge: никогда не будет вызываться, когда сервер заражает клиента, если вы не очистите его в NSURLCredentialStorage. Таким образом, это делает вашу смену полномочий бесполезной. Вы можете использовать NSURLCredentialPersistenceNone, чтобы отключить кеш или очистить кеш при необходимости.

+0

Пробовал это. Отключено кеш. В любом случае, отличный момент, спасибо. – dombesz

Смежные вопросы