NSURLConnection缓存清除和重新连接问题

时间:2010-09-09 11:06:32

标签: iphone ruby-on-rails ipad caching nsurlconnection

给定一个与我的ipad应用程序通信的rails应用程序。我正在使用与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 个答案:

答案 0 :(得分:2)

您是否碰巧缓存了凭据缓存?如果没有,您可以忽略以下所有内容:)

我不知道您选择哪种身份验证模式,这里我在我的iphone应用程序中使用Windows身份验证模式。当服务器端挑战客户端时,我的应用程序将发回一个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来禁用缓存或在必要时清除缓存。