Похоже, требуется базовый вызов синхронизации «NSUserDefaults». Я думаю, что ваш лучший способ - это управлять всеми файлами cookie вашего приложения отдельно в стандартных NSUserDefaults и синхронизировать все отсутствующие файлы с файлами в NSHTTPCookieStorage при запуске. Или посмотрите, есть ли какой-нибудь частный метод синхронизации, если вы чувствуете себя смелым :)

ся с этой проблемой и не желает внедрять собственную систему управления файлами cookie.

Похоже, что какой-то скрытый уровень реализации HTTP в iOS не может должным образом управлять файлами cookie без сессии. Каждый раз, когда HTTP-ответ устанавливает или удаляет файл cookie, немедленная проверка файлов cookie NSHTTPCookieStorage даст ожидаемые результаты и покажет правильное значение sessionOnly.

Но если приложение закрывается вскоре после того, как ответ обновляет файлы cookie, при повторном запуске эти файлы cookie sessionOnly = FALSE будут возвращены в предыдущее состояние, а последние обновления будут потеряны.

Независимо от того, установлены ли cookie-файлы заголовком ответа или NSHTTPCookieSt, orage setCookie: не имеет значения.

Некоторое кэширование / синхронизация вуду должно происходить за кулисами. Время, в течение которого файл cookie становится постоянным, может составлять до 5 секунд.

Кто-нибудь, кто имеет или может указать на какое-то определенное объяснение этого поведения? Это ошибка, простая и понятная? Или какая-то недокументированная особенность, цель которой я не могу понять?

Некоторый код, который вы можете использовать для воспроизведения:

- (void)applicationDidBecomeActive:(UIApplication *)application
{

    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

    NSHTTPCookie *cookie;
    for (cookie in [NSHTTPCookieStorage sharedHTTPCookieStorage].cookies) {
        NSLog(@"%@=%@", cookie.name, cookie.value);
    }

    NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
    [cookieProperties setObject:@"testCookie" forKey:NSHTTPCookieName];
    [cookieProperties setObject:[NSString stringWithFormat:@"%f", [[NSDate date] timeIntervalSince1970]] forKey:NSHTTPCookieValue];
    [cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieDomain];
    [cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieOriginURL];
    [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
    [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];

    // set expiration to one month from now
    [cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:2629743] forKey:NSHTTPCookieExpires];

    cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

}

Этот код должен выводить новое значение при каждом запуске. Вместо этого вы увидите, что если вы быстро выйдете из приложения, значение не изменится.

Некоторые возможные связанные вопросы переполнения стека:

iphone NSHTTPCookieStorage доступен на приложение, чтобы открыть?

iPhone: NSHTTPCookie не сохраняется при перезапуске приложения

NSHTTPCookies отказываются от удаления

удалено NSHTTPCookie возвращается, если приложение завершено

Ответы на вопрос(3)

Ваш ответ на вопрос