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" ); } |