正在努力解决这个问题,不愿实施定制的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

NSHTTPCookies refuse to be deleted

deleted NSHTTPCookie returns if app is terminated

推荐答案

我认为答案在于你问题中的one篇相关帖子:

我制作了一个样本项目来重现这个问题,结果发现

因为这看起来像是一个只进行调试的问题(只在使用

您可以通过正常重启手机并观察NSHTTPCookieStorage的所有更改是否正确保存并重新加载来测试这一点.

Objective-c相关问答推荐

在没有for循环的情况下获取另一个数组中每个对象的属性值数组

跨平台 iPhone/Android 代码共享

如何测试 NSCFBolean 值?

多个 WKWebView 之间的 Cookie 共享

XCTAssertEqual 错误:(3)不等于(3)

在 Objective C 中动态调用类方法

单元测试私有方法 - 目标 C

滚动 NSScrollView 时的回调?

NSInternalInconsistencyException: '无效参数不满足: !stayUp || CLClientIsBackgroundable(内部->fClient)'

如何在另一个视图中获取视图的框架?

反编译 Objective-C 库

MKMapView MKPointAnnotation 点击​​事件

当单元格全屏时,为什么 UICollectionView 会记录错误?

如何在 XCode 中复制文件?

iOS 7 状态栏与 NavigationBar 冲突

Apple 的 API 中的k前缀表示什么?

iOS 崩溃日志(log)中的异常类型

从 UIPageViewController 中移除视图控制器

如何确定 UICollectionView flowLayout 中单元格之间的间距

Cocoa 的依赖注入框架?