Общий экземпляр NSHTTPCookieStorage не сохраняет файлы cookie

Я разрабатываю приложение, в котором сервер передает мне файл cookie для идентификации пользователя.

Мои последовательные запросы должны иметь этот файл cookie, чтобы получить ответ, который ожидает пользователь. Чего я не могу понять, так это того, как и когда общий экземпляр NSHTTPCookieStorage теряет свои файлы cookie.

Первое решение, которое я использовал, — это архивировать и сохранять куки-файлы с моего сервера в пользовательских значениях по умолчанию при завершении работы приложения, затем удалять существующие с моего сервера при запуске приложения и сбрасывать те, которые я сохранил. В процессе разработки я не сталкивался с проблемами, так как сеансы отладки очень короткие и обычно не нужно переводить приложение в фоновый режим.

Во время бета-тестирования начались проблемы. Хак, с которым я пришел, заключается в том, чтобы сохранять файлы cookie не только при завершении работы приложения, но и после вызовов API, которые возвращают мне эти файлы cookie. И загружать сохраненные куки не только при запуске приложения, но и когда приложение возвращается на передний план.

Почему экземпляр общего ресурса NSHTTPCookieStorage избавляется от этих файлов cookie и как лучше всего с этим справиться, поскольку это жизненно важная часть моего приложения, и я не могу доверять такому взломанному решению, если оно не поддерживается более опытными разработчиками.

Заранее спасибо за ответы

РЕДАКТИРОВАТЬ :Вот способы сохранения/чтения/очистки файлов cookie

-(void)saveStoredCookies
{
    NSURL *httpUrl = @"http://myServer.com";
    NSURL *httpsUrl = @"https://myServer.com";

    NSArray *httpCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpUrl];
    NSData *httpCookiesData = [NSKeyedArchiver archivedDataWithRootObject:httpCookies];
    [[NSUserDefaults standardUserDefaults] setObject:httpCookiesData forKey:@"savedHttpCookies"];

    NSArray *httpsCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpsUrl];
    NSData *httpsCookiesData = [NSKeyedArchiver archivedDataWithRootObject:httpsCookies];
    [[NSUserDefaults standardUserDefaults] setObject:httpsCookiesData forKey:@"savedHttpsCookies"];

    [[NSUserDefaults standardUserDefaults] synchronize];
}

-(void)readStoredCookies
{
    //clear, read and install stored cookies
    NSURL *httpUrl = @"http://myServer.com";
    NSURL *httpsUrl = @"https://myServer.com";

    NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpUrl];
    for (NSHTTPCookie *cookie in cookies) {
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
    }
    cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpsUrl];
    for (NSHTTPCookie *cookie in cookies) {
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
    }

    NSData *httpCookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedHttpCookies"];
    if([httpCookiesData length]) {
        NSArray *savedCookies = [NSKeyedUnarchiver unarchiveObjectWithData:httpCookiesData];
        for (NSHTTPCookie *cookie in savedCookies) {
            [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
        }       
    }
    NSData *httpsCookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedHttpsCookies"];
    if([httpsCookiesData length]) {
        NSArray *savedCookies = [NSKeyedUnarchiver unarchiveObjectWithData:httpsCookiesData];
        for (NSHTTPCookie *cookie in savedCookies) {
            [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
        }       
    }
}

-(void)clearStoredCookies
{
    NSURL *httpUrl = @"http://myServer.com";
    NSURL *httpsUrl = @"https://myServer.com";
    NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpUrl];
    for (NSHTTPCookie *cookie in cookies) {
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
    }
    cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpsUrl];
    for (NSHTTPCookie *cookie in cookies) {
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
    }
}
14
задан Moxy 10 August 2012 в 01:07
поделиться