こんにちは私は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=/
sharedHTTPCookieStorage
に NSHTTPCookieStorage
を使用するだけで済むので、次に 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];