NSURLConnection,Basic Auth和Cookies的问题

Mat*_*ias 4 iphone cocoa-touch objective-c http-caching nsurlconnection

我发现我调用REST的服务器将cookie传递给我的iPhone.它还使用HTTP Basic Auth.

我有一个应用程序,您可以在其中更改用于身份验证的帐户,但是我发现更改凭据无关紧要,因为didReceiveAuthenticationChallenge从未调用过.

我已经研究了两个可能的修复:

  • 在更改凭据时手动删除cookie
  • 设置 [request setHTTPShouldHandleCookies:NO]

我想知道我是否正确理解这一点.我预计NSURLRequestReloadIgnoringCacheData会照顾缓存,但似乎并非如此.

我该如何解决这个问题?

编辑:我只是试着设置shouldHandleCookiesNO,但似乎饼干仍然传递到服务器.

小智 7

罗布,你说得对,这似乎确实存在问题.在某些情况下会设置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];
    }
  }
Run Code Online (Sandbox Code Playgroud)

看看这个问题,更多的是 didReceiveAuthenticationChallenge,只能在iPhone上调用一次