web-dev-qa-db-ja.com

NSURLSessionでCookieを設定する

こんにちは私は1つのIphoneアプリケーションを開発しています。このアプリケーションでは、サーバーの応答後にCookieを設定し、それを別の要求に使用します。ネットワークリクエストは次のようになります。

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
    NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;
    NSLog(@"sttaus code %i", httpResp.statusCode);
    if (error) {
        [self.delegate signinWithError:error];
    }
    else {
        [self.delegate signinWithJson:data];
    }
}] resume];

しかし、私はクッキーを設定する方法を知りません。 NSHTTPCookieStorageを使用する必要があることはわかっていますが、設定方法がわかりません。また、そのCookieを別のリクエストにも使用したいと思います。これについて知っている人はいますか?助けが必要。ありがとうございました。

こうやってみた

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{      
    if(error) {
        [self.delegate signinWithError:error];
    }
    else {
        NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;

        [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
        NSHTTPCookie *cookie;

        NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];

        NSDictionary* headers = [(NSHTTPURLResponse *)response allHeaderFields];

        for(NSString *key in [headers allKeys]) {
            NSLog(@"%@ ..PPPP ... %@",key ,[headers objectForKey:key]);
            [cookieProperties setObject:[headers objectForKey:key] forKey:key];
        }

        [cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:2629743] forKey:NSHTTPCookieExpires];

        cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

        [self.delegate signinWithJson:data];
    }
}] resume];

興味があるのは1つのヘッダーフィールドだけですSet-Cookie SSID=kgu62c0fops35n6qbf12anqlo7; path=/

17
nilkash

sharedHTTPCookieStorageNSHTTPCookieStorage を使用するだけで済むので、次に setCookies:forURL:mainDocumentURL: または単一の setCookie: -後者の方がニーズに適している場合があります。

これが機能しない場合は、 NSURLSessionConfiguration を設定して NSHTTPCookieStorage を設定する必要があるかもしれません

ドキュメントには明記されていませんが、 defaultSessionConfiguration はとにかく共有ストアを使用する可能性があります。

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
    NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;

    NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[response URL]];
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:cookies forURL:[response URL] mainDocumentURL:nil];

    NSLog(@"sttaus code %i", httpResp.statusCode);
    if (error) {
        [self.delegate signinWithError:error];
    }
    else {
        [self.delegate signinWithJson:data];
    }
}] resume];
16
Rich