天天看點

iOS網絡程式設計之七——本地使用者憑證Cookie的應用

    cookie是網站為了便是終端身份,儲存在終端本地的使用者憑證資訊。cookie中的字段與意義由服務端進行定義。例如,當使用者在某個網站進行了登入操作後,服務端會将cookie資訊傳回給終端,終端會将這些資訊進行儲存,在下一次再次通路這個網站時,終端會将儲存的cookie資訊一并發送到服務端,服務端根據cookie資訊是否有效來判斷此使用者是否可以自動登入。

    ios中進行http網絡請求cookie管理主要由兩個類負責,一個類是nshttpcookiestorage類,一個是nshttpcookie類。

    nshttpcookiestorage類采用單例的設計模式,其中管理着所有http請求的cookie資訊,常用方法如下:

<a href="http://my.oschina.net/u/2340880/blog/626792#">?</a>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<code>//擷取單例對象</code>

<code>+ (nshttpcookiestorage *)sharedhttpcookiestorage;</code>

<code>//所有cookie資料數組 其中存放nshttpcookie對象</code>

<code>@property (nullable , readonly, copy) nsarray&lt;nshttpcookie *&gt; *cookies;</code>

<code>//手動設定一條cookie資料</code>

<code>- (</code><code>void</code><code>)setcookie:(nshttpcookie *)cookie;</code>

<code>//删除某條cookie資訊</code>

<code>- (</code><code>void</code><code>)deletecookie:(nshttpcookie *)cookie;</code>

<code>//删除某個時間後的所有cookie資訊 ios8後可用</code>

<code>- (nullable nsarray&lt;nshttpcookie *&gt; *)cookiesforurl:(nsurl *)url;</code>

<code>//擷取某個特定url的所有cookie資料</code>

<code>- (</code><code>void</code><code>)removecookiessincedate:(nsdate *)date ns_available(10_10, 8_0);</code>

<code>//為某個特定的url設定cookie</code>

<code>- (</code><code>void</code><code>)setcookies:(nsarray&lt;nshttpcookie *&gt; *)cookies forurl:(nullable nsurl *)url maindocumenturl:(nullable nsurl *)maindocumenturl;</code>

<code>//cookie資料的接收協定</code>

<code>/*</code>

<code>枚舉如下:</code>

<code>typedef ns_enum(nsuinteger, nshttpcookieacceptpolicy) {</code>

<code>    </code><code>nshttpcookieacceptpolicyalways,//接收所有cookie資訊</code>

<code>    </code><code>nshttpcookieacceptpolicynever,//不接收所有cookie資訊</code>

<code>    </code><code>nshttpcookieacceptpolicyonlyfrommaindocumentdomain//隻接收主文檔域的cookie資訊</code>

<code>};</code>

<code>*/</code>

<code>@property nshttpcookieacceptpolicy cookieacceptpolicy;</code>

系統下面的兩個通知與cookie管理有關:

<code>//cookie資料的接收協定改變時發送的通知</code>

<code>foundation_export nsstring * </code><code>const</code> <code>nshttpcookiemanageracceptpolicychangednotification;</code>

<code>//管理的cookie資料發生變化時發送的通知</code>

<code>foundation_export nsstring * </code><code>const</code> <code>nshttpcookiemanagercookieschangednotification;</code>

    nshttpcookie是具體的http請求cookie資料對象,其中屬性方法如下:

25

26

27

28

29

30

31

<code>//下面兩個方法用于對象的建立和初始化 都是通過字典進行鍵值設定</code>

<code>- (nullable instancetype)initwithproperties:(nsdictionary&lt;nsstring *, id&gt; *)properties;</code>

<code>+ (nullable nshttpcookie *)cookiewithproperties:(nsdictionary&lt;nsstring *, id&gt; *)properties;</code>

<code>//傳回cookie資料中可用于添加http頭字段的字典</code>

<code>+ (nsdictionary&lt;nsstring *, nsstring *&gt; *)requestheaderfieldswithcookies:(nsarray&lt;nshttpcookie *&gt; *)cookies;</code>

<code>//從指定的響應頭和url位址中解析出cookie資料</code>

<code>+ (nsarray&lt;nshttpcookie *&gt; *)cookieswithresponseheaderfields:(nsdictionary&lt;nsstring *, nsstring *&gt; *)headerfields forurl:(nsurl *)url;</code>

<code>//cookie資料中的屬性字典</code>

<code>@property (nullable, readonly, copy) nsdictionary&lt;nsstring *, id&gt; *properties;</code>

<code>//請求響應的版本</code>

<code>@property (readonly) nsuinteger version;</code>

<code>//請求相應的名稱</code>

<code>@property (readonly, copy) nsstring *name;</code>

<code>//請求相應的值</code>

<code>@property (readonly, copy) nsstring *value;</code>

<code>//過期時間</code>

<code>@property (nullable, readonly, copy) nsdate *expiresdate;</code>

<code>//請求的域名</code>

<code>@property (readonly, copy) nsstring *domain;</code>

<code>//請求的路徑</code>

<code>@property (readonly, copy) nsstring *path;</code>

<code>//是否是安全傳輸</code>

<code>@property (readonly, getter=issecure) </code><code>bool</code> <code>secure;</code>

<code>//是否隻發送http的服務</code>

<code>@property (readonly, getter=ishttponly) </code><code>bool</code> <code>httponly;</code>

<code>//響應的文檔</code>

<code>@property (nullable, readonly, copy) nsstring *comment;</code>

<code>//相應的文檔url</code>

<code>@property (nullable, readonly, copy) nsurl *commenturl;</code>

<code>//服務端口清單</code>

<code>@property (nullable, readonly, copy) nsarray&lt;nsnumber *&gt; *portlist;</code>

<code></code>

繼續閱讀