Борясь с этой проблемой и не желая внедрять собственную систему управления файлами cookie.
Похоже, что скрытый уровень реализации HTTP в iOS не позволяет должным образом управлять файлами cookie без сессии.Каждый раз, когда HTTP-ответ устанавливает или удаляет файл cookie, немедленная проверка файлов cookie NSHTTPCookieStorage даст ожидаемые результаты и укажет правильное значение sessionOnly.
Но если приложение закрывается вскоре после того, как ответ обновляет файлы cookie, при повторном запуске этих sessionOnly= Ложные куки-файлы будут возвращены в какое-то предыдущее состояние, а последние обновления будут потеряны.
Независимо от того, установлены или удалены куки-файлы заголовком ответа или NSHTTPCookieStorage setCookie: без разницы.
Некоторое кэширование/ Синхронизация вуду должно происходить за кулисами.Время, в течение которого куки становятся постоянными, может составлять до 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 возвращается, если приложениепрекращено