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

任何形式的帮助将不胜感激。

谢谢。

最佳答案

解决了!

结果证明 NSURLConnection 实际上行为正确——也就是说,didReceiveAuthenticationChallenge: 被调用以应对每个身份验证挑战。

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

您可以通过简单地删除 cookie 来强制进行新的挑战。因为这个服务器没有其他有用的cookies,我只是把它们都删除了:

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

关于iphone - didReceiveAuthenticationChallenge 只被调用一次 iPhone,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6372350/

10-12 04:22