NSHTTPCookie(Objective-C)官方文档翻译

继承自:NSObject
遵守协议:NSObject
导入声明:@import Foundation;
适用范围:iOS 2.0 及以后

一、概述(Overview)

一个 NSHTTPCookie 对象代表一个 HTTP cookie。NSHTTPCookie 对象是不可变的,它初始化自一个包含 cookie 属性的字典。

NSHTTPCookie 类支持两种不同的 cookie 版本:

  • 版本 0:这种版本指的是传统的或者老式的 cookie,也就是网景Netscape)公司定义的最初的那种 cookie 格式。我们遇到的大多数 cookie 都是这种格式。

  • 版本 1:这种版本指的是那些在 RFC 2965HTTP State Management Mechanism 中定义的 cookie。

二、功能(Tasks)

1.创建 NSHTTPCookie 实例(Create cookie instances)
+ cookiesWithResponseHeaderFields:forURL:

Returns an array of NSHTTPCookie objects corresponding to the provided response header fields for the provided URL.

Declaration

+ (NSArray <NSHTTPCookie *> *)cookiesWithResponseHeaderFields:(NSDictionary <NSString *,  NSString *> *)*headerFields*
                                                       forURL:(NSURL *)theURL

Parameters

参数 含义
headerFields The header fields used to create the NSHTTPCookie objects.
theURL The URL associated with the created cookies.

Return Value
The array of created cookies.

Discussion
This method ignores irrelevant header fields in headerFields, allowing dictionaries to contain additional data.
If headerFields does not specify a domain for a given cookie, the cookie is created with a default domain value of the URL.
If headerFields does not specify a path for a given cookie, the cookie is created with a default path value of "/".

Availability
Available in iOS 2.0 and later.


+ cookieWithProperties:

Creates and initializes an NSHTTPCookie object using the provided properties.

Declaration

+ (NSHTTPCookie *)cookieWithProperties:(NSDictionary <NSString *, id> *)properties

Parameters

参数 含义
properties The properties for the new cookie object, expressed as key value pairs.

Return Value
The newly created cookie object. Returns nil if the provided properties are invalid.

Discussion
To successfully create a cookie, you must provide values for (at least) the NSHTTPCookiePath, NSHTTPCookieName, and NSHTTPCookieValue keys, and either the NSHTTPCookieOriginURL key or the NSHTTPCookieDomain key.
See Constants for more information on the available cookie attribute constants and the constraints imposed on the values in the dictionary.

Availability
Available in iOS 2.0 and later.

See Also
– initWithProperties:


- initWithProperties:

Returns an initialized NSHTTPCookie object using the provided properties.

Declaration

- (instancetype)initWithProperties:(NSDictionary <NSString *, id> *)properties

Parameters

参数 含义
properties The properties for the new cookie object, expressed as key value pairs.

Return Value
The initialized cookie object. Returns nil if the provided properties are invalid.

Discussion
To successfully create a cookie, you must provide values for (at least) the NSHTTPCookiePath, NSHTTPCookieName, and NSHTTPCookieValue
keys, and either the NSHTTPCookieOriginURL key or the NSHTTPCookieDomain key.
See Constants for more information on the available cookie attribute constants and the constraints imposed on the values in the dictionary.

Availability
Available in iOS 2.0 and later.

See Also
+ cookieWithProperties:

2.将 cookie 转成请求头(Convert cookies to request headers)

+ requestHeaderFieldsWithCookies:

Returns a dictionary of header fields corresponding to a provided array of cookies.

Declaration

+ (NSDictionary)<NSString*, NSString *> *)requestHeaderFieldsWithCookies:(NSArray <NSHTTPCookie *> *)cookies

Parameters

参数 含义
cookies The cookies from which the header fields are created.

Return Value
The dictionary of header fields created from the provided cookies.

Discussion
To send these headers as part of a URL request to a remote server, create an NSMutableURLRequest object, then call the setAllHTTPHeaderFields: or setValue:forHTTPHeaderField: method to set the provided headers for the request. Finally, initialize and start an NSURLSessionTask, NSURLConnection, or NSURLDownload object based on that request object.

Availability
Available in iOS 2.0 and later.

3.获取 cookie 的属性(Getting cookie properties)

comment Property

The receiver's comment string. (read-only)

Declaration

@property(readonly, copy) NSString *comment

Discussion
The receiver’s comment string or nil if the cookie has no comment. This string is suitable for presentation to the user, explaining the contents and purpose of this cookie.

Availability
Available in iOS 2.0 and later.


commentURL Property

The receiver’s comment URL. (read-only)

Declaration

@property(readonly, copy) NSURL *commentURL

Discussion
The receiver’s comment URL or nil if the cookie has none. This value specifies a URL which is suitable for presentation to the user as a link for further information about this cookie.

Availability
Available in iOS 2.0 and later.


domain Property

The domain of the receiver’s cookie. (read-only)

Declaration

@property(readonly, copy) NSString *domain

Discussion
If the domain does not start with a dot, then the cookie is only sent to the exact host specified by the domain. If the domain does start with a dot, then the cookie is sent to other hosts in that domain as well, subject to certain restrictions. See RFC 2965 for more detail.

Availability
Available in iOS 2.0 and later.


expiresDate Property

The receiver’s expiration date. (read-only)

Declaration

@property(readonly, copy) NSDate *expiresDate

Discussion
The receiver’s expiration date, or nil if there is no specific expiration date such as in the case of “session-only” cookies. The expiration date is the date when the cookie should be deleted.

Availability
Available in iOS 2.0 and later.


HTTPOnly Property

A boolean value that indicates whether the receiver should only be sent to HTTP servers per RFC 2965. (read-only)

Declaration

@property(readonly, getter=isHTTPOnly) BOOL HTTPOnly

Discussion
Returns YES if this cookie should only be sent via HTTP headers, NO otherwise.
Cookies may be marked as HTTP only by a server (or by a javascript). Cookies marked as such must only be sent via HTTP Headers in HTTP requests for URL's that match both the path and domain of the respective cookies.

IMPORTANT
Cookies specified as HTTP only should not be delivered to any javascript applications to prevent cross-site scripting vulnerabilities.

Availability
Available in iOS 2.2 and later.


secure Property

A boolean value that indicates whether this cookie should only be sent over secure channels. (read-only)

Declaration

@property(readonly, getter=isSecure) BOOL secure

Discussion
YES if this cookie should only be sent over secure channels, otherwise NO.

Availability
Available in iOS 2.0 and later.


sessionOnly Property

A boolean value that indicates whether the receiver should be discarded at the end of the session (regardless of expiration date). (read-only)

Declaration

@property(readonly, getter=isSessionOnly) BOOL sessionOnly

Discussion
YES if the receiver should be discarded at the end of the session (regardless of expiration date), otherwise NO.

Availability
Available in iOS 2.0 and later.


name Property

The receiver’s name. (read-only)

Declaration

@property(readonly, copy) NSString *name

Availability
Available in iOS 2.0 and later.


path Property

The receiver’s path. (read-only)

Declaration

@property(readonly, copy) NSString *path

Discussion
The cookie will be sent with requests for this path in the cookie's domain, and all paths that have this prefix. A path of "/" means the cookie will be sent for all URLs in the domain.

Availability
Available in iOS 2.0 and later.


portList Property

The receiver's port list. (read-only)

Declaration

@property(readonly, copy) NSArray <NSNumber *> *portList

Discussion
The list of ports for the cookie, returned as an array of NSNumber objects containing integers. If the cookie has no port list this method returns nil and the cookie will be sent to any port. Otherwise, the cookie is only sent to ports specified in the port list.

Availability
Available in iOS 2.0 and later.


properties Property

The receiver’s cookie properties. (read-only)

Declaration

@property(readonly, copy) NSDictionary <NSString *,id> *properties

Discussion
This dictionary can be used with initWithProperties: or cookieWithProperties: to create an equivalent NSHTTPCookie object.
See initWithProperties: for more information on the constraints imposed on the properties dictionary.

Availability
Available in iOS 2.0 and later.


value Property

The receiver’s value. (read-only)

Declaration

@property(readonly, copy) NSString *value

Availability
Available in iOS 2.0 and later.


version Property

The receiver’s version. (read-only)

Declaration

@property(readonly) NSUInteger version

Discussion
The receiver's version. Version 0 maps to “old-style” Netscape cookies. Version 1 maps to RFC 2965 cookies.

Availability
Available in iOS 2.0 and later.

三、常量(Constants)

HTTP Cookie 属性的 key(HTTP Cookie Attribute Keys

These constants define the supported keys in a cookie attributes dictionary.

Declaration

NSString *NSHTTPCookieComment;
NSString *NSHTTPCookieCommentURL;
NSString *NSHTTPCookieDiscard;
NSString *NSHTTPCookieDomain;
NSString *NSHTTPCookieExpires;
NSString *NSHTTPCookieMaximumAge;
NSString *NSHTTPCookieName;
NSString *NSHTTPCookieOriginURL;
NSString *NSHTTPCookiePath;
NSString *NSHTTPCookiePort;
NSString *NSHTTPCookieSecure;
NSString *NSHTTPCookieValue;
NSString *NSHTTPCookieVersion;    

Constants

  • NSHTTPCookieComment

    An NSString object containing the comment for the cookie.
    Only valid for Version 1 cookies and later.** This cookie attribute is optional.**

    Available in iOS 2.0 and later.

  • NSHTTPCookieCommentURL

An NSURL object or NSString object containing the comment URL for the cookie.
Only valid for Version 1 cookies or later.** This cookie attribute is optional.**

Available in iOS 2.0 and later.

  • NSHTTPCookieDiscard

An NSString object stating whether the cookie should be discarded at the end of the session.
String value must be either "TRUE" or "FALSE". This cookie attribute is optional. The default is "FALSE", unless this cookie is version 1 or greater and a value for NSHTTPCookieMaximumAge is not specified, in which case it is assumed to be "TRUE".

Available in iOS 2.0 and later.

  • NSHTTPCookieDomain

An NSString object containing the domain for the cookie.
If this cookie attribute is missing, the domain is inferred from the value for NSHTTPCookieOriginURL. If you do not specify a value for NSHTTPCookieOriginURL, you must specify a value for NSHTTPCookieDomain.

Available in iOS 2.0 and later.

  • NSHTTPCookieExpires

An NSDate object or NSString object specifying the expiration date for the cookie.
This cookie attribute is only used for Version 0 cookies.** This cookie attribute is optional.**

Available in iOS 2.0 and later.

  • NSHTTPCookieMaximumAge

An NSString object containing an integer value stating how long in seconds the cookie should be kept, at most.
Only valid for Version 1 cookies and later. Default is "0". This cookie attribute is optional.

Available in iOS 2.0 and later.

  • NSHTTPCookieName

An NSString object containing the name of the cookie. This cookie attribute is required.

Available in iOS 2.0 and later.

  • NSHTTPCookieOriginURL

An NSURL or NSString object containing the URL that set this cookie.
If you do not provide a value for NSHTTPCookieOriginURL, you must provide a value for NSHTTPCookieDomain.

Available in iOS 2.0 and later.

  • NSHTTPCookiePath

An NSString object containing the path for the cookie.
This cookie attribute is required.

Available in iOS 2.0 and later.

  • NSHTTPCookiePort

An NSString object containing comma-separated integer values specifying the ports for the cookie.
Only valid for Version 1 cookies or later. The default value is an empty string (""). This cookie attribute is optional.

Available in iOS 2.0 and later.

  • NSHTTPCookieSecure

An NSString object indicating that the cookie should be transmitted only over secure channels.
Providing any value for this key indicates that the cookie should remain secure.

Available in iOS 2.0 and later.

  • NSHTTPCookieValue

An NSString object containing the value of the cookie.
This cookie attribute is required.

Available in iOS 2.0 and later.

  • NSHTTPCookieVersion

An NSString object that specifies the version of the cookie.
Must be either "0" or "1". The default is "0". This cookie attribute is optional.

Available in iOS 2.0 and later.

参考(Reference):
https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookie_Class/index.html#//apple_ref/occ/cl/NSHTTPCookie


问题(Question):
1.Cookie 是什么?有哪些属性?百度百科-cookieWikipedia-HTTP cookie
2.Cookie 有几种格式?
3.RFC 是什么?百度百科-RFCWikipedia-RFC
4.Cookie 和 Session 的区别和联系?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容