我发现我调用REST的服务器将cookie传递给我的iPhone。它还使用HTTP Basic Auth。
我有一个应用程序,您可以在其中更改用于身份验证的帐户,但我发现更改凭据无关紧要,因为永远不会调用didReceiveAuthenticationChallenge
。
我已经研究了两个可能的修复方法:
[request setHTTPShouldHandleCookies:NO]
我想知道我是否正确理解这一点。我希望NSURLRequestReloadIgnoringCacheData
能够处理缓存,但似乎并非如此。
我该如何解决这个问题?
编辑:我刚刚尝试将shouldHandleCookies
设置为NO
,但似乎Cookie仍会传递给服务器。
答案 0 :(得分:7)
- (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];
}
}
再看看这个问题 didReceiveAuthenticationChallenge getting called only once iPhone
答案 1 :(得分:2)
安全斯威夫特:
func clearCookies(forURL URL: NSURL) -> Void {
let cookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
let cookies = cookieStorage.cookiesForURL(URL) ?? []
for cookie in cookies {
print("Deleting cookie for domain: \(cookie.domain)")
cookieStorage.deleteCookie(cookie)
}
}
如果您希望收到String
,则可以始终flatMap
可用的NSURL
初始化程序:
let cookies = NSURL(string: string).flatMap(cookieStorage.cookiesForURL) ?? []