http://blog.toright.com/posts/2664/%E5%A6%82%E4%BD%95%E8%AE%93-ios-uiwebview-%E9%80%A3%E7%B7%9A%E6%99%82%E5%82%B3%E9%80%81%E8%87%AA%E8%A8%82-cookie-%E7%9A%84%E6%96%B9%E6%B3%95.html
利用 NSHTTPCookieStorage 管理 Cookie 傳送
在 iOS 中如果自行建立 UIWebView 來開啟遠端站台資料,這時可以透過以下方法加入 Cookie。原理是透過 iOS 提供的 NSHTTPCookieStorage 元件來控制所有從這個 Application 發出的 HTTP Request,如果在 UIWebView 有使用 iFrame 或者 AJAX 發出的 Request 同樣會受到影像,算是一個方便的功能,讓 Cookie 可以集中管理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#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
:
@"http://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
=
@"http://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:
1
2
3
4
|
<?php
// 顯示收到的 Cookie
print_r
(
$_COOKIE
)
;
?>
|
App 執行畫面如下: