iOS開発におけるNSURLRequestクッキーの操作
webView , cookie 。 cookie , cookiede 。
,NSURLRequest cookie, ,NSURlRequest cookie . cookie :
1、クッキーを取得する:
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [cookieJar cookies]) {
NSLog(@"%@", cookie);
}
例:
<NSHTTPCookie version:0 name:"PHPSESSID" value:"evf5rcboo8th1dnl53fs4ukmt2" expiresDate:(null) created:2012-03-13 14:28:13 +0000 (3.53342e+08) sessionOnly:TRUE domain:"blog.cnrainbird.com" path:"/" isSecure:FALSE>
2、現在のクッキーが空の場合、urlを再要求すれば
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://blog.cnrainbird.com"]
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:3];
[NSURLConnection sendSynchronousRequest:request
returningResponse:nil
error:nil];
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [cookieJar cookies]) {
NSLog(@"%@", cookie);
}
3、クリアクッキー
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *_tmpArray = [NSArray arrayWithArray:[cookieJar cookies]];
for (id obj in _tmpArray) {
[cookieJar deleteCookie:obj];
}
4、指定されたクッキーを設定する
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[cookieProperties setObject:@"username" forKey:NSHTTPCookieName];
[cookieProperties setObject:@"rainbird" forKey:NSHTTPCookieValue];
[cookieProperties setObject:@"cnrainbird.com" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"cnrainbird.com" forKey:NSHTTPCookieOriginURL];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
cookis , :
(1): NSDictionary :NSHTTPCookieValue, NSHTTPCookieName, NSHTTPCookiePath, NSHTTPCookieDomain。
(2): NSHTTPCookiePath ,value url Domain。
5、AFNetworkingクッキーの読み取りと設定の解決方案
AFNetworking cookie , NSURLRequest, NSHTTPCookieStorage cookie, cookie :
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: [NSURL URLWithString:kServerAddress]];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookies];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:kUserDefaultsCookie];
NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:kUserDefaultsCookie];
if([cookiesdata length]) {
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata];
NSHTTPCookie *cookie;
for (cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
}
:
(1) cookie, , cookie
(2) cookie, webview loadRequest load NSURLRequest cookie。
6、ある特定の状況:UIWebViewがウェブサイトにアクセスする際、よくある問題はログインする必要があることです.例えば、新浪微博にアクセスしたり、個人アカウントにアクセスしたりしますが、サーバが返すurlに直接アクセスする必要がある場合は、ログインページにリダイレクトしてログインします.
? , cookies。 , cookie, cookies, 。
url request cookies。NSMutableURLRequest - (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field 。 Http request header 。
今日のプロジェクトが到着した場合、useridとtokenを渡す必要があります.
NSDictionary *dictCookieUId = [NSDictionarydictionaryWithObjectsAndKeys:
@"userId", NSHTTPCookieName, userId, NSHTTPCookieValue, @"/",NSHTTPCookiePath,
@"test.com",NSHTTPCookieDomain,nil]; NSHTTPCookie *cookieUserId = [NSHTTPCookie cookieWithProperties:dictCookieUId]; //set token to cookie NSDictionary *dictCookiePToken = [NSDictionarydictionaryWithObjectsAndKeys: @"token", NSHTTPCookieName,
token, NSHTTPCookieValue,
@"/", NSHTTPCookiePath, @"test.com, NSHTTPCookieDomain, nil]; NSHTTPCookie *cookiePassToken = [NSHTTPCookie cookieWithProperties:dictCookiePToken]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURLURLWithString:strUrl]]; // set cookies NSArray *arrCookies = [NSArray arrayWithObjects: cookieUserId, cookiePassToken, nil]; for (NSHTTPCookie *cookie in cookiesForDomain) { NSString *cookieString = [NSString stringWithFormat:@"%@=%@", [cookie name], [cookie value]];
[newRequest setValue:cookieString forHTTPHeaderField:@"Cookie"]; NSLog(@"inserted cookie into request: %@", cookie);
}
[self.webView loadRequest:newRequest];
7、その他.
(1) NSURLConnection UIWebView cookie, , cookie 。
(2) cookie
(3) cookie