【问题标题】:Does NSURLConnection automatically persist cookies sent from server?NSURLConnection 是否会自动保留从服务器发送的 cookie?
【发布时间】:2012-08-14 21:22:47
【问题描述】:

我从 ios 登录到我的 tornado 后端并发回了一个secure_cookie,我注意到只要我验证了我设置的secure_cookie,我也可以请求其他信息。 NSURLConnection 将 cookie 保留多长时间,或者一旦关闭应用程序,cookie 会被删除?

Apple 文档中提到了这一点:

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

【问题讨论】:

  • 这个问题没有答案吗? “NSURLConnection 会保留 cookie 多长时间,还是会在用户关闭应用后删除 cookie?”

标签: ios session-cookies


【解决方案1】:

您的问题的几个方面。

首先,NSURLConnection 默认会根据设备的设置来管理 cookie。它会将 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。

【讨论】:

  • 我唯一关心的问题是苹果文档中的这个 qoute:“注意:更改应用程序中的 cookie 接受策略会影响所有其他正在运行的应用程序的 cookie 接受策略。当另一个应用程序更改 cookie存储或 cookie 接受策略,NSHTTPCookieStorage 通过发布 NSHTTPCookieStorageCookiesChangedNotification 和 NSHTTPCookieStorageAcceptPolicyChangedNotification 通知来通知应用程序。”因此,我似乎应该只使用 NSURLConnection 的默认 cookie 管理。
  • @RubyGladiator,该文档是特定于 Mac OS 的,我认为上面的注释说这不适用于 iOS:iOS 注意:iOS 中的应用程序不共享 Cookie。
  • 没错,文档的设置方式使这一点令人困惑。
【解决方案2】:

你必须从here查看cookie缓存管理 这将帮助您更好地了解如何处理 cookie 的缓存。

还有一个非常好的description,其中提到您可以从标头字段中获取 cookie,然后您可以完全控制它。如果需要,请在应用程序再次启动时存储和使用。

我希望这能帮助你解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 2012-09-27
    • 2021-11-13
    • 2010-11-09
    • 2018-08-20
    • 2020-08-04
    • 2016-03-06
    • 2012-01-29
    相关资源
    最近更新 更多