利用 NSHTTPCookieStorage 管理 Cookie 傳送
在 iOS 中如果自行建立 UIWebView 來開啟遠端站台資料,這時可以透過以下方法加入 Cookie。原理是透過 iOS 提供的 NSHTTPCookieStorage 元件來控制所有從這個 Application 發出的 HTTP Request,如果在 UIWebView 有使用 iFrame 或者 AJAX 發出的 Request 同樣會受到影像,算是一個方便的功能,讓 Cookie 可以集中管理。
#import "AppDelegate.h" @implementation AppDelegate @synthesize window = _window; - (void)dealloc { [_window release]; [super dealloc]; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // 關閉 Statusbar [[UIApplication sharedApplication]setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; // 定義 cookie 要設定的 host NSURL *cookieHost = [NSURL URLWithString:@"https://blog.toright.com:80/"]; // 設定 cookie NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties: [NSDictionary dictionaryWithObjectsAndKeys: [cookieHost host], NSHTTPCookieDomain, [cookieHost path], NSHTTPCookiePath, @"COOKIE_NAME", NSHTTPCookieName, @"COOKIE_VALUE", NSHTTPCookieValue, nil]]; // 設定 cookie 到 storage 中 [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; // 建立 NSURLRequest 連到 cookie.php,連線的時候會自動加入上面設定的 Cookie NSString *urlAddress = @"https://blog.toright.com/cookie.php"; NSURL *myurl = [NSURL URLWithString:urlAddress]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:myurl]; // 建立 UIWebView UIWebView *webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // 設定 UIWebView 讀取的位置 [self.window addSubview:webView]; [webView loadRequest:requestObj]; [webView release]; [self.window makeKeyAndVisible]; return YES; } @end
用來驗證是否有傳送 Cookie 的程式,cookie.php 的程式碼如下,單純顯示收到的 Cookie:
<?php // 顯示收到的 Cookie print_r($_COOKIE); ?>
App 執行畫面如下:
參考資料