努力解决此问题并厌恶实现自定义cookie管理系统。
似乎iOS的HTTP实现的某些隐藏级别无法正确管理无 session cookie。每当HTTP响应设置或删除cookie时,立即检查NSHTTPCookieStorage cookie都会产生预期的结果并指示正确的sessionOnly值。
但是,如果应用程序在响应更新cookie后不久退出,那么在重新启动这些sessionOnly = FALSE cookie时,它们将恢复为以前的状态,而最近的更新丢失。
cookie是由响应头设置还是由删除或NSHTTPCookieStorage 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
NSHTTPCookies refuse to be deleted
deleted NSHTTPCookie returns if app is terminated
最佳答案
我认为答案在于您问题中链接到的SO帖子的one:
您可以通过正常重启电话并观察到NSHTTPCookieStorage的所有更改均已正确保留并重新加载来进行测试。