NSHTTPCookieStorage官方文档阅读

NSHTTPCookieStorage
Overview NSHTTPCookieStorage实现一个管理cookie存储的单例对象(shared instance)。 每个cookie由NSHTTPCookie类的实例表示。 通常,Cookie在所有应用程序之间共享,并且跨进程边界保持同步。 会话Cookie(当Cookie对象的sessionOnly为YES)对于单个进程来说是本地的,不会共享。
NOTE:

1. iOS中的应用程序之间不会共享Cookie。 2. 对cookie接受策略所做的更改会影响使用Cookie storage的所有正在运行的应用程序。

在macOS 10.9 和iOS 7之后,NSHTTPCookieStorage就是线程安全的了;
Symbols Creating and Initializing a Cookie Storage Object
  • - (id)initWithStorageLocation:(NSURL *)storageFileURL
    使用具有给定文件系统URL来初始化NSHTTPCookieStorage对象,以将Cookie信息存储在磁盘上。
    storageFileURL:要用于Cookie存储的文件的URL。
Getting the Shared Cookie Storage Object
  • @property(class, readonly, strong) NSHTTPCookieStorage *sharedHTTPCookieStorage
    返回共享的cookie仓库,此属性为类属性;
Getting and Setting the Cookie Accept Policy
  • @property NSHTTPCookieAcceptPolicy cookieAcceptPolicy
    仓库接受cookie的策略;
    默认cookie接受策略是NSHTTPCookieAcceptPolicyAlways。 更改cookie策略会影响使用Cookie存储的所有正在运行的应用程序。
Adding and Removing Cookies
  • - (void)deleteCookie:(NSHTTPCookie *)cookie
    从仓库里删除指定的cookie;
  • - (void)setCookie:(NSHTTPCookie *)cookie
    如果仓库的cookie接受策略允许,则在仓库中存储指定的cookie。
    如果cookie存在于cookie仓库中,cookie将替换现有的具有相同名称,域和路径的cookie。 只有接收者的cookie接受策略是NSHTTPCookieAcceptPolicyAlways或NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain,此方法才接受cookie。 如果接收者的cookie接受策略是NSHTTPCookieAcceptPolicyNever,则cookie将被忽略。
  • - (void)setCookies:(NSArray *)cookies forURL:(NSURL *)URL mainDocumentURL:(NSURL *)mainDocumentURL
    如果仓库的cookie接受政策允许,则向调用者添加一组Cookie。
    theURL:与添加的Cookie相关联的URL。
    mainDocumentURL:如果知道top-level frame的主要HTML文档的URL, 可以是nil ,如果cookie接受策略是NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain,则此URL用于确定是否应该接受cookie。(不懂~~~)
    如果存在于cookie存储中,新的cookie将替换现有具有相同的名称,域和路径的老的cookie。 如果接收者的cookie接受策略是NSHTTPCookieAcceptPolicyNever,则cookie将被忽略。
    要从一组响应头存储Cookie,应用程序可以使用cookiesWithResponseHeaderFields:forURL:传递头字段字典,然后使用此方法接收这些cookies。
Retrieving Cookies
  • @property(readonly, copy) NSArray *cookies
    仓库中存储的所有cookie;
    如果要对cookie存储的cookie进行排序,应该使用sortedCookiesUsingDescriptors:方法,而不是排序此方法的结果。
  • - (NSArray *)cookiesForURL:(NSURL *)URL
    【NSHTTPCookieStorage官方文档阅读】返回要发送到指定网址的Cookie仓库里的Cookie。即返回Cookie的URL与所提供的URL匹配一组cookie。
    应用程序可以使用NSHTTPCookie方法requestHeaderFieldsWithCookies:将此数组转换为一组标题字段以添加到NSMutableURLRequest对象头部信息中。
  • - (NSArray *)sortedCookiesUsingDescriptors:(NSArray *)sortOrder
    返回按照一组给定的排序描述符进行排序了的cookie。
    sortOrder:用于排序的排序描述符,NSSortDescriptor对象的数组。
Constants
typedef enum NSHTTPCookieAcceptPolicy : NSUInteger { NSHTTPCookieAcceptPolicyAlways, NSHTTPCookieAcceptPolicyNever, NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain } NSHTTPCookieAcceptPolicy;

NSHTTPCookieAcceptPolicy指定由NSHTTPCookieStorage类实现的cookie接受策略。
1. NSHTTPCookieAcceptPolicyAlways:默认策略,接受所有的cookie; 2. NSHTTPCookieAcceptPolicyNever:拒绝所有的cookie; 3. NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:仅从主文档域接受cookie。

Notifications
  • const NSNotificationName NSHTTPCookieManagerCookiesChangedNotification
    当NSHTTPCookieStorage实例中存储的cookie已更改时,会发布此通知。
    在macOS中,Cookie在应用程序之间共享,这意味着可以发送此通知以响应另一个应用程序的操作。 iOS中的应用程序不会共享Cookie。
    通知对象是NSHTTPCookieStorage实例。 此通知不包含用户信息字典。
  • const NSNotificationName NSHTTPCookieManagerAcceptPolicyChangedNotification
    当NSHTTPCookieStorage实例的接受策略发生变化时,会发布此通知。
    在macOS中,Cookie在应用程序之间共享,这意味着可以发送此通知以响应另一个应用程序的操作。 iOS中的应用程序不会共享Cookie。
    通知对象是NSHTTPCookieStorage实例。 此通知不包含用户信息字典。
Instance Methods
  • - (void)getCookiesForTask:(NSURLSessionTask *)task completionHandler:(void (^)(NSArray *cookies))completionHandler
    获取指定task中的所有cookie,并在获取后调用completionHandler(官方文档并未给出解释
  • - (void)removeCookiesSinceDate:(NSDate *)date
    官方文档并未给出解释,以下是根据头文件中的解释翻译来的
    从cookie仓库中删除所有超过指定日期的cookie(但是我们并不知道内部对比的是什么时间,是添加cookie的时间还是cookie的到期时间,这点需要去验证下
  • - (void)storeCookies:(NSArray *)cookies forTask:(NSURLSessionTask *)task
    存储指定task中的所有cookie(官方文档并未给出解释
Type Methods
  • + (NSHTTPCookieStorage *)sharedCookieStorageForGroupContainerIdentifier:(NSString *)identifier
    该方法文档中并未给出解释,下面的解释是从头文件中翻译来的
    获取与指定的应用程序组标识符相关联的容器的cookie仓库;主要是用于APP和extensions之间的仓库共享;
    identifier:应用程序组标识符
    返回值:在应用程序组容器中持久存储的cookie仓库
    默认情况下,应用程序和关联的应用extensions有不同的数据容器,这意味着sharedHTTPCookieStorage单例将在应用程序和extensions中引用不同的Cookie仓库。 此方法允许客户端创建一个可以在所有应用程序和extensions之间共享的持久性Cookie仓库,并可访问相同的应用程序组。 使用相同标识符对此方法的后续调用将返回相同的Cookie仓库实例。

    推荐阅读