给定一个与我的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;
}
答案 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来禁用缓存或在必要时清除缓存。