我在这里做的是,获取具有身份验证的URL。因此,我使用函数
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
当面对身份验证时,我会提供UIAlertView输入用户名和密码,如果用户输入正确,则会调用此方法。
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
在这个方法中,我使登录窗口消失并引入详细视图。
当我想要退出功能时,问题出现了。我想要的是删除用户输入的凭据并再次获取该URL,以进行身份验证=目的。所以,我称之为 didReceiveAuthenticationChallenge 。
但是,它会直接转到 didReceiveResponse 方法,而不会询问任何内容。这里的问题是我无法清除凭据。你可以帮我这么做吗?
提前多多感谢!
答案 0 :(得分:7)
尝试使用代码清除Cookie的代码
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
{
NSString* domainName = [cookie domain];
NSRange domainRange = [domainName rangeOfString:@"twitter"];
if(domainRange.length > 0)
{
[storage deleteCookie:cookie];
}
}
答案 1 :(得分:3)
我知道这是一个老问题,但我在这里有答案:
事实证明,cookie不是UIWebView存储数据的唯一方式。还有一个名为NSURLCredentialStorage的持久性事物,因此清除它的唯一方法就是:
NSLog(@"Logging out...");
// Clear credential storage
NSURLCredentialStorage *credentialStorage = [NSURLCredentialStorage sharedCredentialStorage];
NSDictionary *credentialProtectionSpaces = [credentialStorage allCredentials];
for (NSURLProtectionSpace *protectionSpace in credentialProtectionSpaces)
{
NSDictionary *credentials = [credentialStorage credentialsForProtectionSpace:protectionSpace];
for (NSString * username in credentials)
{
[credentialStorage removeCredential:[credentials objectForKey:username] forProtectionSpace:protectionSpace];
NSLog(@"clearing: %@", username);
}
}
NSLog(@"checking...");
credentialStorage = [NSURLCredentialStorage sharedCredentialStorage];
credentialProtectionSpaces = [credentialStorage allCredentials];
for (NSURLProtectionSpace *protectionSpace in credentialProtectionSpaces)
{
NSDictionary *credentials = [credentialStorage credentialsForProtectionSpace:protectionSpace];
for (NSString * username in credentials)
{
[credentialStorage removeCredential:[credentials objectForKey:username] forProtectionSpace:protectionSpace];
NSLog(@"checking: %@", username);
}
}
您会发现用户名第一次显示,但在第二次通过同一循环检查时不显示。它们已从NSURLProtectionSpaces中删除。
-Sean
答案 2 :(得分:3)
很棒的问题,在我的情况下,我无法弄清楚为什么我们无法退出网络视图。
我使用了第一个答案中的一些代码,但是希望删除整个内容中的所有Cookie,而不是仅删除与某个字符串或URL相关联的Cookie。这是我做的:
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [cookieJar cookies]) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
这很有效!现在当您注销时,它每次都会返回到原始登录屏幕。