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

    返回要发送到指定网址的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仓库实例。

你可能感兴趣的:(NSHTTPCookieStorage官方文档阅读)