Я начинающий разработчик iOS. У меня есть приложение, которое требует входа в систему, и у него есть функции, которые делают HTTP-запросы через приложение. В соответствии с моим пониманием, когда при входе в систему сервер отправляет приложению уникальный cookie сеанса, который нам нужно использовать с последующими HTTP-запросами в тот же сеанс. Мой метод, который делает HTTP-запрос, приведен ниже. Все запросы в моем приложении используют этот же метод.
+ (NSData*)makeHTTPPostRequestToURL:(NSURL *)url withPostString:(NSString *)postString{
if (!postString)
{
postString = [NSString stringWithFormat:@""];
}
NSMutableURLRequest* urlRequest = [NSMutableURLRequest requestWithURL:url];
NSString *authStr = [NSString stringWithFormat:@"genuser:genuser"];
NSData *authData = [authStr dataUsingEncoding:NSASCIIStringEncoding];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodedStringWithOptions:0]];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setValue:authValue forHTTPHeaderField:@"Authorization"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[urlRequest setValue:[NSString stringWithFormat:@"%lu", (unsigned long)postString.length] forHTTPHeaderField:@"Content-Length"];
postString =[self specialencoding:NSUTF8StringEncoding :postString ];
NSLog(@"Request log is %@", postString);
[urlRequest setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"POST:ESCAPED:%@",postString);
NSHTTPURLResponse* urlResponse = nil;
NSError* error = nil;
NSData* responseData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&urlResponse error:&error];
return responseData;
}
Как вы можете видеть, я не использую cookie, когда я делаю запрос в том же сеансе. Все запросы работают нормально. Мое сомнение заключается в том, как запрос подается в тот же сеанс, если он не отправляет куки файл с ним. IOS сохраняет последний полученный файл cookie для каждого приложения и добавляет его с дальнейшими запросами приложения. Какие-нибудь идеи?
Так что происходит то, что файлы cookie, отправленные обратно, хранятся в объекте NSHTTPCookieStorage
. Всякий раз, когда запросы отправляются обратно на URL-адрес, соответствующий домену cookie и пути, cookie отправляется вместе с запросом автоматически.
Чтобы проверить, какие файлы cookie существуют для определенного домена:
let url = NSURL(string: "https://yourcookiedomain.com")!;
let cookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage();
let cookies = cookieStorage.cookiesForURL(url) as Array<NSHTTPCookie>;
var cookie: NSHTTPCookie? = nil;
for c in cookies {
if (c.name == "cookie_name") {
cookie = c;
break;
}
}