ios中對cookie操作的兩個類分別是:1. NSHTTPCookie  2. NSHTTPCookieStorage,具體的使用在這裡就不多說了。

1.什麼是Cookie(“小甜餅”)呢?
  簡單來說,Cookie就是伺服器暫存放在你的電腦裡的資料(.txt格式的文字檔案),好讓伺服器用來辨認你的計算機。當你在瀏覽網站的時候,Web伺服器會先送一小小資料放在你的計算機上,Cookie 會幫你在網站上所打的文字或是一些選擇都記錄下來。當下次你再訪問同一個網站,Web伺服器會先看看有沒有它上次留下的Cookie資料,有的話,就會依據Cookie裡的內容來判斷使用者,送出特定的網頁內容給你。   
Cookie有什麼作用呢?   現在上許多網站都用新使用者註冊這一項,有時註冊了一下,等到下次再訪問該站點時,會自動識別到你,並且向你問好,是不是覺得很親切?當然這種作用只是表面現象,更重要的是,網站可以利用cookie跟蹤統計使用者訪問該網站的習慣,比如什麼時間訪問,訪問了哪些頁面,在每個網頁的停留時間等。利用這些資訊,一方面是可以為使用者提供個性化的服務,另一方面,也可以作為了解所有使用者行為的工具,對於網站經營策略的改進有一定參考價值。例如,你在某家航空公司站點查閱航班時刻表,該網站可能就建立了包含你旅行計劃的Cookies,也可能它只記錄了你在該站點上曾經訪問過的Web頁,在你下次訪問時,網站根據你的情況對顯示的內容進行調整,將你所感興趣的內容放在前列。這是高階的Cookie應用。目前Cookie最廣泛的是記錄使用者登入資訊,這樣下次訪問時可以不需要輸入自己的使用者名稱、密碼了——當然這種方便也存在使用者資訊洩密的問題,尤其在多個使用者共用一臺電腦時很容易出現這樣的問題。   另外,有人認為網站利用cookie可能存在侵犯使用者隱私的問題,但由於大多使用者對此瞭解不多,而且這種對使用者個人資訊的利用多數作為統計資料之用,不一定造成使用者的直接損失,因此現在對於cookie與使用者隱私權的問題並沒有相關法律約束,很多網站仍然在利用cookie跟蹤使用者行為,有些程式要求使用者必須開啟cookie才能正常應用。IE瀏覽器使用者可以通過“隱私”選項中的隱私設定的高低來決定是否允許網站利用cookie跟蹤自己的資訊,從全部限制到全部允許,或者限制部分網站,也可以通過手動方式對具體的網站設定允許或者禁止使用cookie進行編輯。IE瀏覽器的預設設定是“中級”-對部分網站利用cookie有限制。個人電腦的cookie設定(對IE瀏覽器而言)可通過選單“工具-Internet選項-隱私”來檢視和修改。

1,獲取cookie
獲取cookie只能在請求中獲取cookie,否則時獲取不到的,url就不給出了,大家用自己的url測試一下就行。
獲取到cookie後把cookie進行歸檔儲存到userDefaults裡


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#pragma mark 獲取並儲存cookie到userDefaults
- (void)getAndSaveCookie
{
    NSLog(@"=============獲取cookie==============");
    NSString *urlString = @"";
 
    //請求一個網址,即可分配到cookie
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFJSONResponseSerializer new];
    [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
 
        //獲取cookie
        NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
        for (NSHTTPCookie *tempCookie in cookies) {
            //列印獲得的cookie
            NSLog(@"getCookie: %@", tempCookie);
        }
 
        /*
         * 把cookie進行歸檔並轉換為NSData型別
         * 注意:cookie不能直接轉換為NSData型別,否則會引起崩潰。
         * 所以先進行歸檔處理,再轉換為Data
         */
        NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
 
        //儲存歸檔後的cookie
        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
        [userDefaults setObject: cookiesData forKey: @"cookie"];
        NSLog(@"\n");
 
        [self deleteCookie];
 
        [self setCoookie];
 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
 
        nil;
    }];
}

2,刪除cookie
把獲取到的cookie刪除掉,該步驟可以用在登出或者切換賬號裡。
當前,我這裡刪除cookie是為了檢測後面的通過本地儲存的資料進行設定cookie是否成功


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma mark 刪除cookie
- (void)deleteCookie
{
    NSLog(@"============刪除cookie===============");
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
 
    //刪除cookie
    for (NSHTTPCookie *tempCookie in cookies) {
        [cookieStorage deleteCookie:tempCookie];
    }
 
    //把cookie打印出來,檢測是否已經刪除
    NSArray *cookiesAfterDelete = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
    for (NSHTTPCookie *tempCookie in cookiesAfterDelete) {
        NSLog(@"cookieAfterDelete: %@", tempCookie);
    }
    NSLog(@"\n");
}

3,通過本地儲存的資料設定cookie
把本地的cookie取出並反歸檔,設定到cookie中,並且檢測cookie是否設定成功


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#pragma mark 再取出儲存的cookie重新設定cookie
- (void)setCoookie
{
    NSLog(@"============再取出儲存的cookie重新設定cookie===============");
    //取出儲存的cookie
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 
    //對取出的cookie進行反歸檔處理
    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:[userDefaults objectForKey:@"cookie"]];
 
    if (cookies) {
        NSLog(@"有cookie");
        //設定cookie
        NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        for (id cookie in cookies) {
            [cookieStorage setCookie:(NSHTTPCookie *)cookie];
        }
    }else{
        NSLog(@"無cookie");
    }
 
    //列印cookie,檢測是否成功設定了cookie
    NSArray *cookiesA = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
    for (NSHTTPCookie *cookie in cookiesA) {
        NSLog(@"setCookie: %@", cookie);
    }
    NSLog(@"\n");
}