在 iOS 应用程序中持久化 Cookie?
Posted
技术标签:
【中文标题】在 iOS 应用程序中持久化 Cookie?【英文标题】:Persisting Cookies In An iOS Application? 【发布时间】:2011-06-03 14:56:39 【问题描述】:我将在 ios 应用程序中使用 NSHTTPCookieStorage
来管理从 url 检索到的 cookie,并且我知道它将在您的应用程序运行时管理 cookie。但是,我想知道在应用程序关闭后是否可以保留 cookie。然后在再次打开应用程序时再次读取这些 cookie。 NSHTTPCookieStorage
在应用程序使用之间是否保留 cookie?或者只是在应用程序运行时?我是否需要使用CoreData
来保存这些 cookie?`
【问题讨论】:
【参考方案1】:您需要在加载应用时重新设置 cookie。我使用这样的代码:
NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:@"MySavedCookies"];
if([cookiesdata length])
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata];
NSHTTPCookie *cookie;
for (cookie in cookies)
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
而且效果很好。
【讨论】:
MySavedCookies
已经存在了吗?还是我必须在我的应用即将停用时存储它?
你必须自己保存 - 这正是我保存我的地方。
在用户默认值中存储 cookie 可能是一个安全漏洞,因为所有 plist 都可以通过 iFunBox 等工具访问。它们应该被加密,但最好的行为是遵循 @gazreese 的回答。【参考方案2】:
您不需要按照其他答案中的建议自己保留 cookie。 NSHTTPCookieStorage
将为您保留 cookie,但您需要确保 cookie 在服务器端设置了到期日期。
没有到期日期的 Cookie 被视为“仅限会话”,并且会在您重新启动应用程序时被清除。您可以通过NSHTTPCookie
中的 BOOL 属性检查“仅会话”情况。这是标准的 cookie 内容,而不是 iOS 特有的内容。
【讨论】:
来到这里寻找这种清晰度,谢谢。有趣的是,当应用程序重新启动时它会被清除。您可以在桌面上重新启动 Chrome 并保持会话打开。 +1 我现在明白为什么我的 cookie 不再存在了 :)。谢谢!! 你为我节省了很多时间!谢谢! @gazreese 我正在尝试加密 iOS cordova 应用程序中的 cookie 文件。它的工作,但只有当应用程序处于前台时。当我切换应用程序或按下主页按钮时,会使用相同的数据创建新的 cookie 文件。谁能指导我如何加密 cookie 文件? 你让我开心,谢谢!以上是关于在 iOS 应用程序中持久化 Cookie?的主要内容,如果未能解决你的问题,请参考以下文章
Opera TV Store 应用程序中的 Cookie/持久数据存储
iOS - 使用 AFNetworking 保存和持久化 JSON 结果的策略