努力解决此问题并厌恶实现自定义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的所有更改均已正确保留并重新加载来进行测试。

10-07 21:53