fbpx

如何讓 iOS UIWebView 連線時傳送自訂 Cookie 的方法

利用 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 執行畫面如下:

參考資料

  2 comments for “如何讓 iOS UIWebView 連線時傳送自訂 Cookie 的方法

發佈留言