正在努力解决这个问题,不愿实施定制的cookie管理系统.
似乎iOS实现HTTP的某些隐藏级别无法正确管理无会话cookie.每当HTTP响应设置或删除cookie时,立即判断NSHTTPCookie存储cookie将产生预期结果,并指示正确的sessionOnly值.
但是,如果应用程序在响应更新cookies后不久退出,则在重新启动这些sessionOnly=FALSE cookies时,cookies将恢复到以前的状态,并且最近的更新将丢失.
Cookie是由响应头还是NSHTTPCookie存储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 avaible on app reopen?
iPhone: NSHTTPCookie is not saved across app restarts