2012-01-19 102 views
5

我有一个UIWebView加载网站,用户身份验证。该网站创建一个身份验证cookie。在浏览器中,除非您清除Cookie,否则您将始终登录。当xCODE加载时,它可以在查看cookie jar时看到列出的cookie,但它不会发送到webView。 我想知道如何让webView知道auth cookie在那里,所以它不会每次都提示用户进行身份验证。iOS的UIwebView身份验证Cookie

回答

7

您可以使用NSURLConnection类来执行HTTP请求以登录网站并检索cookie。要执行请求,只需创建一个NSURLConnection实例并为其分配一个委托对象。

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 

然后,实现委托方法。

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response; 
    NSDictionary *fields = [HTTPResponse allHeaderFields]; 
    NSString *cookie = [fields valueForKey:"Set-Cookie"]; // It is your cookie 
} 

保留或复制cookie字符串。当你想执行另一个请求时,将它添加到你的NSURLRequest实例的HTTP头部。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
[request addValue:cookie forHTTPHeaderField:"Cookie"]; 

删除Cookie您可以随时调用这个方法:

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    for (NSHTTPCookie *each in [[[cookieStorage cookiesForURL:YOUR_URL] copy] autorelease]) { 
     [cookieStorage deleteCookie:each]; 
    } 
+0

好,我是新来的Xcode和我对此有疑问。如果他们太简单,随时给我打电话。在AppDelegate.m文件中,我尝试声明NSURL和NSURLConnection,并得到一个关于那些不是常量的编译器错误。我也在AppDelagate.m中实现了委托并编译。 NSMutable我不知道应该采用什么方法。我确信这是简单的问题,但我真的不知道。 – Hector

2

我解决了这个问题。这个问题与配置有关,因为UIWebView没有被视为标准的Web浏览器。我通过.net和IIS验证用户身份。我在我的网站的App_Browser目录中添加了一个generic.browser文件。该文件的内容是:

<browsers> 
    <browser refID="Mozilla" > 
    <capabilities> 
     <capability name="cookies" value="true" /> 
    </capabilities> 
    </browser> 
    <browser refID="Default"> 
     <capabilities> 
     <capability name="cookies" value="true" /> 
     </capabilities> 
    </browser> 
</browsers> 

纠正的问题是能力使饼干就行了。

给我使用的解决方案的参考是这样的

Asp.Net Forms Authentication when using iPhone UIWebView

4

您可以使用共享存储的cookie读取所有网站的身份验证cookie。

NSHTTPCookie *cookie; 

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [cookieJar cookies]) 
{ 
    NSLog(@"%@", cookie); 
} 

或获得的.NET aspxauth饼干为您的网站

NSArray *cookiesForURL = [cookieJar cookiesForURL: [NSURL URLWithString: **MYURL**]]; 

for (cookie in cookiesForURL) 
{ 
    if([cookie.name compare:@".ASPXAUTH"] == NSOrderedSame) 
    { 
     NSLog(@"%@", cookie); 
     break; 
    } 
}