NSURLConnection会自动保存从服务器端发送的cookie吗?

17

我从iOS设备登录到我的Tornado后端,并返回了一个secure_cookie。我发现只要验证了我设置的secure_cookie,就可以请求其他信息。NSURLConnection会持续保留cookie吗?还是在关闭应用程序时cookie会被删除?

这在苹果文档中有提到:

URL加载系统会自动发送适用于NSURLRequest的任何存储的cookie,除非请求指定不发送cookie。


这个问题没有答案吗?“NSURLConnection会持续保存cookie多久,还是该cookie会在用户关闭应用程序后被删除?” - RubyGladiator
2个回答

26
你的问题有几个方面。
首先,NSURLConnection 默认会根据设备的设置来管理 cookie。它将保存 cookie 并在适当时发送它们(当域名匹配现有 cookie 时)。这意味着如果你从带有 cookie 的 URL 进行请求,它将被发送。这解释了你提到的行为。通常情况下,使用默认设置,cookie 将持续相当长的时间。
然而,这个初始声明可能对你的需求没有什么帮助。我假设你可能想要控制这个 "secure_cookie" 字段的过期时间(或者永久保留),以便你的应用程序不必在未来进一步进行身份验证。
在这种情况下,可以查看 NSHTTPCookieStorage。该类将允许你检索:
[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"http://example.com"]]
和设置:
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie] (还要设置 cookie 字典对象)
基于经验和其他人的在线反馈,您应该注意到cookie存储并不总是100%可靠。如果您想向服务器发送特定的cookie和值,请使用您的应用程序(例如prefs或Core Data)存储该值,并在每次启动时使用适当的NSHTTPCookieStorage重置cookie。

我所关心的唯一问题是苹果文档中的这句话:“注意:更改应用程序中的 cookie 接受策略将影响所有其他正在运行的应用程序的 cookie 接受策略。当另一个应用程序更改 cookie 存储或 cookie 接受策略时,NSHTTPCookieStorage 通过发布 NSHTTPCookieStorageCookiesChangedNotification 和 NSHTTPCookieStorageAcceptPolicyChangedNotification 通知向应用程序发出通知。” 因此,似乎我应该只使用 NSURLConnection 的默认 cookie 管理。 - RubyGladiator
3
@RubyGladiator,那份文档是针对 Mac OS 的,而且我认为上面的注释说这对于 iOS 并不适用: iOS 注释:在 iOS 中,应用程序之间不共享 Cookie。 - Adam B
没错,文档的设置让这一点变得令人困惑。 - RubyGladiator

2
你需要查看这里的cookie缓存管理:这里。这将帮助你更好地了解如何处理cookie的缓存。
还有一个非常好的描述,其中提到您可以从头字段中获取cookie,然后完全控制它。如果需要,在应用程序再次启动时存储和使用它。
我希望这能帮助你解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接