Сеансовые куки HTTP в iOS

0

Я начинающий разработчик 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 для каждого приложения и добавляет его с дальнейшими запросами приложения. Какие-нибудь идеи?

Теги:
cookies
session
http

1 ответ

2
Лучший ответ

Так что происходит то, что файлы 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;
    }
}
  • 0
    Привет @thatidiotguy Спасибо за ответ на мой вопрос. Если я запрашиваю сервер для нового сеанса (в случае тайм-аута сеанса), отправив учетные данные еще раз, будет ли старый cookie заменен новым для последующих запросов?
  • 0
    @chaithu Я не знаю, почему бы тебе не попробовать? Я опубликую некоторый код для получения файлов cookie в хранилище. Дай мне минуту.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню