2012-01-19 128 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; 
    } 
}