Làm cách nào để bật cookie trong Ứng dụng iPhone có sử dụng Cửa sổ UIWebView để hệ thống đăng nhập của tôi hoạt động?Bật cookie trong UIWebView (iPhone)
Trả lời
Nếu trang web bạn đang đăng nhập là trang ASP.NET, sự cố có thể do UIWebView gửi một Tác nhân người dùng không được công nhận. Xem Change User Agent in UIWebView (iPhone SDK)
Để chắc chắn bắt đầu với
[NSHTTPCookieStorage sharedHTTPCookieStorage].cookieAcceptPolicy =
NSHTTPCookieAcceptPolicyAlways;
Nhưng, như đã đề cập bởi @JoelFan, vấn đề này có thể Agent chuỗi tài khoản của bạn gây ASP.NET để cố gắng và thất bại tại một đăng nhập cookie. Thay vì một phản ứng bao gồm
Set-Cookie: .ASPXAUTH = thực sự kéo dài-hex-số
nó trả về một chuyển hướng đến một cái gì đó giống như
Location:/(F (long-sorta-base64ish-tìm-chuỗi))/
Chuỗi tác nhân người dùng UIWebView mặc định là một cái gì đó như
Tác nhân người dùng: Mozilla/5.0 (iPad; CPU OS 7_0_2 như Mac OS X) AppleWebKit/537.51.1 (KHTML, như Gecko) Mobile/11A501
nhưng ASP.NET không thích điều này. Safari sẽ gửi một cái gì đó như thế này:
User-Agent: Mozilla/5.0 (iPad; CPU OS 7_0_2 như Mac OS X) AppleWebKit/537.51.1 (KHTML, như Gecko) Version/7.0 thoại di động/11A501 Safari/9537,53
làm như sau từ rất sớm, có lẽ trong AppDelegate.m bạn
// DON'T try to reuse a UIWebView for this.
UIWebView *wv = [[UIWebView alloc] initWithFrame:CGRectZero];
// This webview has already decided to use the default user agent string.
// let's use javascript to get the existing user agent string
NSString *userAgent = [wv stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
// let's tack on some stuff to make ASP.NET happy
userAgent = [userAgent stringByAppendingString:@" Version/7.0 Safari/9537.53"];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent": userAgent}];
// New UIWebViews inited after here will use the user agent string you made.