2012-01-19 33 views
5

Tôi có một UIWebView tải trang web xác thực người dùng. Trang web tạo cookie Xác thực. Khi trong trình duyệt, trừ khi bạn xóa cookie, bạn sẽ luôn được đăng nhập. Khi xCODE tải nó có thể thấy cookie được liệt kê khi nhìn vào lọ cookie nhưng nó không được gửi đến webView. Tôi muốn biết cách làm cho webView biết rằng cookie auth có đó để nó không tiếp tục nhắc người dùng xác thực mỗi lần.iOS UIwebView Cookie xác thực

Trả lời

7

Bạn có thể sử dụng lớp NSURLConnection để thực hiện yêu cầu HTTP để đăng nhập trang web và truy xuất cookie. Để thực hiện một yêu cầu, chỉ cần tạo một thể hiện của NSURLConnection và gán một đối tượng delegate cho nó.

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

Sau đó, triển khai phương thức đại biểu.

- (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 
} 

Giữ lại hoặc sao chép chuỗi cookie. Khi bạn muốn thực hiện một yêu cầu khác, hãy thêm nó vào tiêu đề HTTP của cá thể NSURLRequest của bạn.

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

ĐẾN xóa Cookie bất cứ lúc nào bạn có thể gọi phương pháp này:

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

Ok, tôi mới để Xcode và tôi có thắc mắc về vấn đề này. Hãy gọi cho tôi tên nếu chúng quá đơn giản. Trong tệp AppDelegate.m tôi cố gắng khai báo NSURL và NSURLConnection và nhận được một lỗi trình biên dịch về những hằng số không có dấu. Tôi đã thực hiện ủy nhiệm cũng trong AppDelagate.m và biên dịch. NSMutable Tôi không biết nên dùng phương pháp nào. Tôi chắc chắn đây là những câu hỏi đơn giản nhưng tôi thực sự không biết. – Hector

2

tôi giải quyết vấn đề này. Vấn đề phải làm với cấu hình vì UIWebView không được xem như là một trình duyệt web tiêu chuẩn. Tôi đang xác thực người dùng thông qua .net và IIS. Tôi đã thêm tệp generic.browser vào thư mục App_Browser của trang web của mình. Nội dung của tập tin là:

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

Dòng mà sửa chữa vấn đề này là khả năng cho phép cookie.

Các tham chiếu đến các giải pháp tôi sử dụng là này

Asp.Net Forms Authentication when using iPhone UIWebView

4

Bạn có thể đọc cookie xác thực từ tất cả các trang web bằng cách sử dụng Lưu trữ cookie chia sẻ.

NSHTTPCookie *cookie; 

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

OR để có được các tập tin cookie aspxauth .net cho trang web của bạn

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

for (cookie in cookiesForURL) 
{ 
    if([cookie.name compare:@".ASPXAUTH"] == NSOrderedSame) 
    { 
     NSLog(@"%@", cookie); 
     break; 
    } 
} 
Các vấn đề liên quan