iOS WKWebView中Cookie使用(一) Cookie詳解

try again

Cookie的起源

??早期的Web應用面臨的最大問題之一就是如何維持狀態(tài),即服務器無法知道兩個請求是否來自同一個瀏覽器俭缓。當時最簡單的方法就是在請求的頁面中插入一個token,然后在下次請求時將這個token返回至服務器,這需要通過頁面的form表單或者URL的query來進行傳遞,手動操作容易出錯纠屋。
??1994年,網(wǎng)景通訊的Lou Montulli將"magic cookies"的概念應用到Web通訊中。他的原始說明文檔提供了cookie工作原理的基本信息,該文檔后來被作為規(guī)范納入RFC 2109中,最終納入RFC 2965±塘現(xiàn)在所有的Web瀏覽器都支持cookie伴箩。

Cookie詳解

??HTTPCookies, 通常稱之為'Cookie',是在遠程瀏覽器端存儲數(shù)據(jù)并以此跟蹤和識別用戶的機制猴抹。從實現(xiàn)上來說,Cookie是存儲在客戶端上的一小段文本文件,瀏覽器通過HTTP協(xié)議和服務端進行Cookie交互,即一個Web頁面或服務器告知瀏覽器按照一定的規(guī)范來存儲這些cookie信息,并在隨后的請求中將這些信息發(fā)送至服務器,服務器通過這些信息來識別不同的用戶≌埃現(xiàn)在大多數(shù)需要登錄的網(wǎng)站在用戶驗證成功之后都會設置一個cookie,只要這個cookie存在并且有效,用戶就可以自由瀏覽這個網(wǎng)站的任何頁面,若cookie被刪除或者過期,則需要用戶重新登錄。

Cookie創(chuàng)建

??服務器通過發(fā)送名為Set-Cookie的HTTP消息頭來創(chuàng)建一條cookie信息,其格式如下:

Set-Cookie:<cookie-name>=<cookie-value>;
          Expires=<date>;
          Max-Age=<non-zero-digit>;
          Domian=<domain-value>;
          path=<path-value>;
          secure;
          HttpOnly=<httponly-value>
  • 消息第一部分通常是一個key=value格式的字符串,也是原始規(guī)范中指定的格式脆侮。
  • Expires為過期時間,指定了cookie何時不會再被發(fā)送至服務器,隨后瀏覽器將會刪除該cookie,該選項是一個Wdy, DD-Mon-YYYY HH:MM:SS GMT的日期格式锌畸。例如:
Set-Cookie: name=Nicholas; expires=Sat, 02 May 2009 23:38:25 GMT
  • domain指定了cookie將要被發(fā)送至哪個或者哪些域。默認情況下,domain會被設置為創(chuàng)建該cookie的頁面所在的域名,所以給相同域名發(fā)送請求時,該cookie會被發(fā)送至服務器
  • path指定了請求資源URL中必須存在該path路徑,才會發(fā)送cookie消息頭靖避。通常是將path選項的值與請求URL從頭開始逐個字符比較,如果字符匹配,則發(fā)送cookie消息頭潭枣。例如:
Set-Cookie:name=Nicholas;path=/blog

??該例中, path 值會與 /blog , /blogtest 等相匹配,任何以 /blog 開頭的選項都是符合規(guī)則的。需要注意的是,只有在 domain 選項過濾之后才會對 path 選項進行比對幻捏。

  • secure 該選項只是一個標記,沒有具體的值,表示一個請求只有通過SSL或者HTTPS創(chuàng)建時,包含 secure 選項的cookie才會被發(fā)送至服務器盆犁。
  • HttpOnly指定該cookie無法通過JavaScript腳本讀取,即 document.cookieXMLHttpRequest 對象和 Request API均無法讀取cookie,只有瀏覽器發(fā)出HTTP請求時,才會帶上該cookie篡九。

Cookie的使用

??cookie一般用于采用HTTP作為信息交換協(xié)議的客戶端和服務端來記錄需要持久化的信息谐岁。一般由服務端創(chuàng)建,傳遞到客戶端,客戶端從HTTP消息中讀取cookie信息,并保存到本地,當客戶端再次訪問服務器時,會從本地讀取存儲的cookie信息,附加到HTTP消息中發(fā)送請求,服務端再從接收到的HTTP消息中讀取cookie,進行下一步操作。

由于cookie信息以明文方式保存在文本文件中瓮下,對一些敏感信息如口令翰铡、銀行帳號如果要保存在本地cookie文件中钝域,最好采用加密形式讽坏。

??與cookie類似的另一個概念是會話(Session),會話一般是記錄客戶端和服務器端從客戶端瀏覽器連接上服務器端到關閉瀏覽器期間的持久信息例证。會話一般保存在內存中路呜,不保存到磁盤上。會話可以通過cookie機制來實現(xiàn)织咧,對于不支持cookie的客戶端胀葱,會話可以采用URL重寫方式來實現(xiàn)◇厦桑可以將會話理解為內存中的cookie抵屿。
??使用會話會對系統(tǒng)伸縮性造成負面影響,當服務器端要在很多臺服務器上同步復制會話對象時捅位,系統(tǒng)性能會受到較大傷害轧葛,尤其會話對象較大時。這種情況下可以采用cookie艇搀,將需要記錄的信息保存在客戶端尿扯,每次請求時發(fā)送到服務器端,服務器端不保留狀態(tài)信息焰雕,避免在服務器端多臺機器上復制會話而造成的性能下降

Cookie路徑概念

??cookie 一般都是由于用戶訪問頁面而被創(chuàng)建的衷笋,可是并不是只有在創(chuàng)建 cookie 的頁面才可以訪問這個 cookie。

默認情況下矩屁,只有與創(chuàng)建 cookie 的頁面在同一個目錄或子目錄下的網(wǎng)頁才可以訪問辟宗,這個是因為安全方面的考慮爵赵,造成不是所有頁面都可以隨意訪問其他頁面創(chuàng)建的 cookie。舉個例子:
  在 "http://www.reibang.com/u/" 這個頁面創(chuàng)建一個cookie慢蜓,那么在"/u/"這個路徑下的頁面如: "http://www.reibang.com/u/cb09084735af"這個頁面默認就能取到cookie信息亚再。
  可在默認情況下, "http://www.reibang.com"或者 "http://www.reibang.com/xxxx/" 就不可以訪問這個 cookie(光看沒用晨抡,實踐出真理_)氛悬。
  那么如何讓這個 cookie 能被其他目錄或者父級的目錄訪問類,通過修改 cookie 的路徑就可以實現(xiàn)耘柱。例子如下

document.cookie = "name=value;path=superpath/otherpath"

最常用的是讓cookie在根目錄下,不管在哪個頁面創(chuàng)建cookie,所有頁面都可以使用

document.cookie = "name=Darren;path=/"

Cookie域概念

??同域之間cookie共享可以通過domain屬性實現(xiàn),例如:"www.qq.com" 與 "sports.qq.com" 公用一個關聯(lián)的域名"qq.com"如捅,我們如果想讓 "sports.qq.com" 下的cookie被 "www.qq.com" 訪問,我們就需要用到 cookie 的domain屬性调煎,并且需要把path屬性設置為 "/"镜遣。例:

document.cookie = "username=Darren;path=/;domain=qq.com"

注:一定的是同域之間的訪問,不能把domain的值設置成非主域的域名,會造成cookie污染士袄。

Cookie安全性

??通常 cookie 信息都是使用HTTP連接傳遞數(shù)據(jù)悲关,這種傳遞方式很容易被查看,所以 cookie存儲的信息容易被竊取娄柳。假如 cookie 中所傳遞的內容比較重要寓辱,那么就要求使用加密的數(shù)據(jù)傳輸。
??cookie 的屬性“secure”赤拒,默認的值為空秫筏。如果一個 cookie 的屬性為secure,那么它與服務器之間就通過HTTPS或者其它安全協(xié)議傳遞數(shù)據(jù)挎挖。語法如下:

  document.cookie = "username=Darren;secure"

??把cookie設置為secure这敬,只保證 cookie 與服務器之間的數(shù)據(jù)傳輸過程加密,而保存在本地的 cookie文件并不加密蕉朵。如果想讓本地cookie也加密崔涂,得自己加密數(shù)據(jù)。

注:就算設置了secure 屬性也并不代表他人不能看到你機器本地保存的 cookie 信息始衅,所以說到底冷蚂,別把重要信息放cookie就對了,囧...

Cookie自動刪除

cookie會被瀏覽器自動刪除,有幾下幾個原因:

  • 會話cookie(Session cookie)會在會話結束時(瀏覽器關閉)被刪除
  • 持久化cookie(Persistent cookie)在達到失效日期時被刪除
  • 如果瀏覽器中cookie數(shù)量達到限制,那么cookie會被刪除以為新的cookie創(chuàng)建空間
    對于自動刪除來說,Cookie管理十分重要,因為這些刪除都是無意識的.

Cookie的限制條件

  • cookie屬性:
  • cookie的大小:原始規(guī)范中限定每個域名下不超過 20 個 cookie觅闽,早期的瀏覽器都遵循該規(guī)范帝雇,并且在 IE7 中有更近一步的提升。在微軟的一次更新中蛉拙,他們在 IE7 中增加 cookie 的限制數(shù)量到 50 個尸闸,與此同時 Opera 限定 cookie 數(shù)量為 30 個,Safari 和 Chrome 對與每個域名下的 cookie 個數(shù)沒有限制。

發(fā)向服務器的所有 cookie 的最大數(shù)量(空間)仍舊維持原始規(guī)范中所指出的:4KB吮廉。所有超出該限制的 cookie 都會被截掉并且不會發(fā)送至服務器

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末苞尝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宦芦,更是在濱河造成了極大的恐慌宙址,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件调卑,死亡現(xiàn)場離奇詭異抡砂,居然都是意外死亡,警方通過查閱死者的電腦和手機恬涧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門注益,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溯捆,你說我怎么就攤上這事丑搔。” “怎么了提揍?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵啤月,是天一觀的道長。 經(jīng)常有香客問我劳跃,道長谎仲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任售碳,我火速辦了婚禮强重,結果婚禮上绞呈,老公的妹妹穿的比我還像新娘贸人。我一直安慰自己,他們只是感情好佃声,可當我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布艺智。 她就那樣靜靜地躺著,像睡著了一般圾亏。 火紅的嫁衣襯著肌膚如雪十拣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天志鹃,我揣著相機與錄音夭问,去河邊找鬼。 笑死曹铃,一個胖子當著我的面吹牛缰趋,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼秘血,長吁一口氣:“原來是場噩夢啊……” “哼味抖!你這毒婦竟也來了?” 一聲冷哼從身側響起灰粮,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤仔涩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粘舟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熔脂,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年柑肴,在試婚紗的時候發(fā)現(xiàn)自己被綠了锤悄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘉抒,死狀恐怖零聚,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情些侍,我是刑警寧澤隶症,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布,位于F島的核電站岗宣,受9級特大地震影響蚂会,放射性物質發(fā)生泄漏。R本人自食惡果不足惜耗式,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一胁住、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刊咳,春花似錦彪见、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跷坝,卻和暖如春酵镜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柴钻。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工淮韭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贴届。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓靠粪,卻偏偏與公主長得像足丢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子庇配,可洞房花燭夜當晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內容