在这个问题上挣扎并且不愿意实现自定义cookie管理系统。
似乎iOS的HTTP实现中存在一些隐藏的问题,无法正确地处理无会话cookie。每当HTTP响应设置或删除cookie时,立即检查NSHTTPCookieStorage cookies将产生预期结果,并指示正确的sessionOnly值。
但是,如果应用程序在响应更新cookie后不久退出,在重新启动时,那些sessionOnly=FALSE cookie将恢复到某个先前状态,并且最近的更新将丢失。
无论是响应头还是NSHTTPCookieStorage setCookie:设置/删除cookie都没有区别。
幕后可能正在进行一些缓存/同步操作。使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];
}
这段代码应该在每次启动时输出新的值。但是,如果您快速退出应用程序,则会发现该值未更改。
一些可能相关的stack overflow问题: iphone NSHTTPCookieStorage可在应用程序重新打开时使用? iPhone:NSHTTPCookie在应用程序重新启动时不会保存 NSHTTPCookies拒绝被删除 如果应用程序终止,则删除的NSHTTPCookie会返回