didReceiveAuthenticationChallenge只调用一次iPhone

时间:2011-06-16 13:05:15

标签: iphone objective-c nsurlconnection

我使用NSURLConnection连接到服务器。服务器要求我使用委托方法的基本身份验证: - didReceiveAuthenticationChallenge。但这只被召唤一次。如果我将密码更改为某个不同的值,那么这个delegate方法不会被调用,并且我的登录成功了吗?

任何形式的帮助都将受到赞赏。

感谢。

4 个答案:

答案 0 :(得分:6)

解决!

事实证明NSURLConnection实际上表现正常 - 也就是说,每次身份验证质询都会调用didReceiveAuthenticationChallenge:

问题是服务器在第一个之后没有发送挑战。结果是因为服务器正在设置cookie。

您只需删除Cookie即可强制执行新的挑战。因为此服务器没有其他有用的cookie,所以我只删除所有这些:

- (void)clearCookiesForURL {
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    NSArray *cookies = [cookieStorage cookiesForURL:_URL];
    for (NSHTTPCookie *cookie in cookies) {
        NSLog(@"Deleting cookie for domain: %@", [cookie domain]);
        [cookieStorage deleteCookie:cookie];
    }
}

答案 1 :(得分:1)

您必须执行以下步骤才能完全关闭会话。

  1. 删除所有Cookie
  2. 删除所有凭据
  3. NSURLCredentialPersistence应为NSURLCredentialPersistenceNone

答案 2 :(得分:1)

不幸的是,目前还没有简单的方法可以满足您的要求:

Apple提供信息的说明: TLS Session Cache

打开Radar错误请求: No way to clear TLS Cache with NSURLConnection

答案 3 :(得分:0)

NSURLConnection将缓存凭据。这是一种查找和删除特定凭据的方法(因此您再次受到质疑):

Is it possible to prevent an NSURLRequest from caching data or remove cached data following a request?

希望对你有用, 史蒂夫