什么是cookie,使用正確的姿勢(shì)在app中種植cookie

Cookie定義

百度百科是這么定義Cookie的,Cookie指某些網(wǎng)站為了辨別用戶身份葫辐、進(jìn)行 session跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)。在前端開發(fā)識(shí)別用戶身份的流程如下:

  1. 用戶登錄成功伴郁,獲取token耿战,保存token 到本地,同事保存一份token到NSHTTPCookieStorage中蛾绎,下次在http請(qǐng)求的時(shí)候昆箕,默認(rèn)httpRequest對(duì)象會(huì)默認(rèn)帶上NSHTTPCookieStorage中保存的cookie
  2. 用戶在登錄成功后,服務(wù)端會(huì)把cookie設(shè)置在NSHTTPURLResponse租冠,客戶端不需要重新設(shè)置cookie鹏倘,只需要讀取NSHTTPURLResponse中的cookie值然后保存在本地用戶記錄用戶的登錄狀態(tài)

Cookie的作者

  1. 服務(wù)端
  2. 客戶端(原生app,h5顽爹,pc)

Cookie的基本使用

Cookie相關(guān)類

  • NSHTTPCookie:cookie基本類纤泵,有以下基本屬性:
1. version:版本號(hào)
2. name:名稱
3. value:值
4. expiresDate:超時(shí)時(shí)間,注意:一定要設(shè)置,不然很可能設(shè)置的cookie無(wú)效
5. domain:設(shè)置的域名
6. path:設(shè)置路徑捏题,一般根目錄設(shè)置“/”
7. HTTPOnly:只能用做發(fā)送http請(qǐng)求玻褪,不能作用于其他用戶,保證cookie不被其他的js獲取公荧,比如你的頁(yè)面接入了第三方j(luò)s带射,如果這個(gè)js是惡意的,可以獲取cookie里面的信息循狰,那么很可能拿到用戶的私密信息窟社,所以建議使用設(shè)置HTTPOnly為YES,一般服務(wù)器在設(shè)置cookie時(shí)绪钥,也應(yīng)該設(shè)置HTTPOnly
8. secure:是否只能通過加密連接發(fā)送到受信任的服務(wù)器(即通過SSL或TLS)灿里,不應(yīng)該被交付給任何服務(wù)器,防止跨站點(diǎn)腳本漏洞的javascript應(yīng)用程序程腹。
  • NSHTTPCookieStorage:保存cookie的單利
    包含了cookie的基本操作匣吊,常用的方法有

    1. 設(shè)置cookie
      - (void)setCookie:(NSHTTPCookie *)cookie;

    2. 刪除cookie
      - (void)deleteCookie:(NSHTTPCookie *)cookie;

    3. 寫入Cookie

      NSMutableDictionary *dict = [NSMutableDictionary dictionary];        
      [dict setObject:@".tairanmall.com" forKey:NSHTTPCookieDomain];        
       [dict setObject:@"/" forKey:NSHTTPCookiePath];
      [dict setObject:@"token" forKey:NSHTTPCookieName];
       [dict setObject:@"123" forKey:NSHTTPCookieValue];
      
      // 過期時(shí)間為1個(gè)月
      [dict setValue:[NSDate dateWithTimeIntervalSinceNow:2592000] forKey:NSHTTPCookieExpires];    
       [dict setObject:@"0" forKey:NSHTTPCookieVersion];    
      NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:dict];    
      

    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
    ```

    1. Cookie的讀取
        NSHTTPCookieStorage *cookieStore = [NSHTTPCookieStorage     sharedHTTPCookieStorage];   
    for (NSHTTPCookie *cookie in [cookieStore cookies]) {       
       // 獲取指定key的cookie
        if ([cookie.name isEqualToString:name]) {
            
         }
     }
    

在webView中設(shè)置cookie

  • UIWebView(早起的webview框架)

    UIWebView設(shè)置Cookie與在http請(qǐng)求中添加的Cookie共用一套NSHTTPCookieStorage,所以保證設(shè)置一次即可

  • WKWebView

    WKWebView相對(duì)于UIWebView寸潦,有以下優(yōu)點(diǎn)

    1. 內(nèi)存占用是UIWebView的1/4~1/3
    2. 頁(yè)面加載速度有提升色鸳,有的文章說(shuō)它的加載速度比UIWebView提升了一倍左右
    3. 更為細(xì)致地拆分了 UIWebViewDelegate 中的方法
    4. 自帶進(jìn)度條。不需要像UIWebView一樣自己做假進(jìn)度條(通過NJKWebViewProgress和雙層代理技術(shù)實(shí)現(xiàn))甸祭,技術(shù)復(fù)雜度和代碼量缕碎,根貼近實(shí)際加載進(jìn)度優(yōu)化好的多
    5. 允許JavaScript的Nitro庫(kù)加載并使用(UIWebView中限制)
    6. 可以和js直接互調(diào)函數(shù)褥影,不像UIWebView需要第三方庫(kù)WebViewJavascriptBridge來(lái)協(xié)助處理和js的交互池户。

缺點(diǎn)

  1. Cookie管理很麻煩,不能支持緩存頁(yè)面Cookie
  2. 同樣是由于進(jìn)程間通信性能問題凡怎,HTTPBody字段被丟棄
    [request setHTTPMethod:@"POST"];[request setHTTPBody:[@"bodyData"dataUsingEncoding:NSUTF8StringEncoding]];[wkwebview loadRequest: request];

cookie設(shè)置注意項(xiàng)

  1. 必須設(shè)置過期時(shí)間:否則很容易會(huì)設(shè)置cookie后立馬就會(huì)超時(shí)
  2. cookie自動(dòng)丟失的問題:cookie存儲(chǔ)在NSHTTPCookieStorage中校焦,NSHTTPCookieStorage會(huì)持久化在本地,理論上只要app啟動(dòng)统倒,就可以讀取到設(shè)置過的cookie寨典,但是偶發(fā)性的cookie被丟失,丟失原因不明房匆,有相關(guān)資料顯示cookie在客戶端中五分鐘又可能存在丟失的情況耸成,這種情況比較偶發(fā),
  3. cookie內(nèi)存最大為4k浴鸿,不要使用過長(zhǎng)的cookie的值井氢,設(shè)置過多的cookie
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市岳链,隨后出現(xiàn)的幾起案子花竞,更是在濱河造成了極大的恐慌,老刑警劉巖掸哑,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件约急,死亡現(xiàn)場(chǎng)離奇詭異零远,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)厌蔽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門牵辣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人奴饮,你說(shuō)我怎么就攤上這事服猪。” “怎么了拐云?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵罢猪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我叉瘩,道長(zhǎng)膳帕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任薇缅,我火速辦了婚禮危彩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泳桦。我一直安慰自己汤徽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布灸撰。 她就那樣靜靜地躺著谒府,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浮毯。 梳的紋絲不亂的頭發(fā)上完疫,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音债蓝,去河邊找鬼壳鹤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛饰迹,可吹牛的內(nèi)容都是我干的芳誓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼啊鸭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼锹淌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎型檀,沒想到半個(gè)月后甚纲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體库正,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡曲楚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了褥符。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片龙誊。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖喷楣,靈堂內(nèi)的尸體忽然破棺而出趟大,到底是詐尸還是另有隱情,我是刑警寧澤铣焊,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布逊朽,位于F島的核電站,受9級(jí)特大地震影響曲伊,放射性物質(zhì)發(fā)生泄漏叽讳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一坟募、第九天 我趴在偏房一處隱蔽的房頂上張望岛蚤。 院中可真熱鬧,春花似錦懈糯、人聲如沸涤妒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)她紫。三九已至,卻和暖如春蜂奸,著一層夾襖步出監(jiān)牢的瞬間犁苏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工扩所, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朴乖。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓祖屏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親买羞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子袁勺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354