为什么NSHTTPCookieStorage没有正确保存cookie?

时间:2010-10-30 01:25:57

标签: iphone cookies

我在iPhone应用程序中遇到了一些奇怪的NSHTTPCookieStorage问题。当我在我的Web服务上调用登录操作时,该服务会发回一个名为“auth”的身份验证cookie以及其他一些cookie。

当我将用户注销时,我在服务器上调用了一个删除cookie的注销操作。如果我在调用注销之前打印[NSHTTPCookieStorage cookie]的结果,我会按预期看到auth cookie。注销后,我看到auth cookie不再存在(正如预期的那样)。

但是,如果我关闭应用程序并重新启动它,则会返回auth cookie!

我不确定这里发生了什么。如果NSHTTPCookieStorage只是没有持久存在任何cookie,那将是一回事,但它似乎正在挽救其中一些。

有谁知道发生了什么?我需要手动管理cookie吗?有没有办法将NSHTTPCookieStorage中的内容提交到磁盘?

3 个答案:

答案 0 :(得分:1)

有三种与URL请求相关的本地存储机制会影响身份验证质询的处理方式:(显然)NSHTTPCookieStorageNSURLCredentialStorageNSURLCacheNSURLCredentialStorage可能是您应该关注的下一个地方,但清除所有缓存通常被认为是获得所需效果的最可靠方法。

这个代码段非常方便:https://gist.github.com/559071(清除所有缓存)。

答案 1 :(得分:0)

Nick,我假设您正在使用XCode 3.x构建IOS 4.x SDK。这可能是一个很长的镜头,但你提到你关闭应用程序,然后再次启动它。从IOS 4.x开始,iPhone应用程序默认启用多任务处理。这意味着无论您是否想要它,如果您只是正常关闭它,您的应用程序将保留在内存中。打败这个的方法是进入你的app-name-Info.plist并将“应用程序不在后台运行”键添加到列表中。然后勾选复选框。我建议您在保存项目后进行全面清理并在此时进行构建。此外,如果您在模拟器中运行,建议您通过选择“iPhone模拟器”然后从应用程序下拉菜单中选择“重置内容和设置”来完全重置模拟器。

答案 2 :(得分:0)

我也遇到了同样的问题,我使用NSUserDefaults解决了这个问题。

请参阅this link