用NSURLSession设置cookie
嗨,我正在开发一个Iphone应用程序,我想在服务器响应后设置cookie,并将其用于另一个请求。 我的networking请求看起来像。
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];
但我不知道如何设置cookie。 我知道我必须使用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];
我只对一个头域感兴趣Set-Cookie SSID=kgu62c0fops35n6qbf12anqlo7; path=/
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];
我研究了很多,但在另一种语言的网站上find了一个。 解决scheme是为会话开始和结束添加一个空的事件处理程序:
protected void Session_Start(object sender, EventArgs e) { } protected void Session_End(object sender, EventArgs e) { }