为这个问题而苦苦挣扎,不愿实施自定义 cookie 管理系统。
iOS 的 HTTP 实现的某些隐藏级别似乎无法正确管理无会话 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 在应用程序重新打开时可用?