理解 iPhone 上的 NSHTTPCookieStorage

12

也许我错过了什么,但从苹果的文档中关于NSHTTPCookieStorage,我不禁想知道这是否安全可靠。

这是否意味着cookie存储是在iPhone上所有应用程序之间共享的?如果我的应用程序发出Http调用并导致保存一些cookie,那么现在所有应用程序都可以访问这些cookie吗?

像这样的方法:

cookiesForURL:返回将发送到指定URL的接收器的所有cookie。

使其看起来更加可疑。

有人能解释一下这是如何运作的吗?这个类是做什么的?

另外,假设我的理解是错误的,这确实是沙盒化的每个应用程序,那么使用NSURLRequest进行的调用是否自动从此存储中保存/检索cookie,还是开发人员在分派请求之前设置请求标头是其责任?


FYI:我测试了一下,似乎它被沙盒化到你的应用程序中。因此,如果你从你的应用程序中使用UIWebView访问一个网站,浏览器设置的cookie将对你可用。但不包括其他应用程序设置的cookie。我会为苹果记录一个文档错误。 - psychotik
苹果似乎已经更新了文档,现在说明在iOS上,cookie不会在应用程序之间共享。 - Nikolai Ruhe
3个回答

22

您的应用程序只能访问其自身沙箱内的Cookie。


谢谢。你能引用一个来源或文档吗?还是你基于经验知道这个呢?这完全不是我对上面链接的文档的解释,所以我想了解更多。 - psychotik
据我所知,我只能访问由自己的应用程序创建的未过期的cookie。例如,我无法访问Mobile Safari创建的任何cookie。但是,我没有进行过严格的测试,而且看起来你引用的文档与我的经验相矛盾。建议您自行测试:使用带有发出cookie的网页的Safari,然后在您自己的应用程序中,迭代单例cookie jar中的cookie并查看您找到了什么。如果您没有看到Safari cookie,则与文档相矛盾--此时可能值得向http://bugreport.apple.com报告。 - Alex Reynolds
1
是的,我已经测试过了,它似乎是被沙盒化到你的应用程序中。所以,如果你从你的应用程序中在UIWebView中访问一个网站,浏览器设置的cookie将会对你可用。但不包括其他应用程序的cookie。我会为苹果记录一份文档错误。 - psychotik
1
根据文档,iOS中的注释:Cookie在应用程序之间不共享。这是在“概述”部分中提到的。 - Alaa Nassef
在NSHTTPCookieStorage类的参考文档中,我看到了一条注释,它说:“对cookie接受策略所做的更改会影响使用cookie存储的所有当前运行的应用程序。”这是否真的意味着它会影响所有正在运行的应用程序?如果是这样的话,那么它确实很危险,开发人员需要非常谨慎地设置它以适当地处理每个情况。 - Soumya Das

7

3

我猜你可能对于能够从其他域名/URL访问cookie感到困惑。 从技术上讲,这是真的,因为当你使用UIWebView时,你的原生应用程序就像一个浏览器。 如果在你的UIWebView中加载了www.siteA.com和www.siteB.com,那么两个域名的cookie都可以被你的objc代码访问。 所有的应用程序,包括移动Safari,都有自己的CookieJar,它们之间互相无法访问。


1
我不明白为什么我的答案会有负反馈 :) cookiesForURL 正是用于获取特定 URL 的 cookie。该 URL 可以是您提到的任何 URL。关键在于,它只返回您 cookie 存储中的 cookie。如果您让用户在应用程序中浏览 facebook.com,则可以访问 facebook.com 的 cookie。 - Ibrahim Okuyucu

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