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