Cookie

本页使用了标题或全文手工转换,现处于繁体转换模式
出自求聞百科

小甜餅」(Cookies,複數形態:Cookies),指由網站服務器生成,為了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數據(通常經過加密),當用戶訪問服務器時,又由本地終端被發送給服務器以便通信。Cookie技術由網景公司的前雇員盧·蒙特利在1993年3月發明。最初定義於RFC 2109,歷經RFC 2965,至現在的RFC 6265。目前使用最廣泛的Cookie標準卻不是RFC中定義的任何一個,而是在網景公司制定的標準上進行擴展後的產物。

分類

Cookie保存在客戶端中,按在客戶端中的存儲位置,可分為內存Cookie和硬盤Cookie。

內存 Cookie 由瀏覽器維護,保存在內存中,瀏覽器關閉即消失,存在時間短暫。硬盤Cookie保存在硬盤里,有過期時間,除非用戶手動清理或到了過期時間,硬盤Cookie不會清除,存在時間較長。所以,按存在時間,可分為非持久Cookie和持久Cookie。

用途

因為HTTP協議是無狀態的,即服務器不知道用戶上一次做了什麼,這嚴重阻礙了交互式Web應用程序的實現。在典型的網上購物場景中,用戶瀏覽了幾個頁面,買了一盒餅乾和兩瓶飲料。最後結帳時,由於HTTP的無狀態性,不通過額外的手段,服務器並不知道用戶到底買了什麼,所以Cookie就是用來繞開HTTP的無狀態性的「額外手段」之一。服務器可以設置或讀取Cookie中包含的信息,藉此維護用戶跟服務器會話中的狀態。

在剛才的購物場景中,當用戶選購了第一項商品,服務器在向用戶發送網頁的同時,還發送了一段Cookie,記錄着那項商品的信息。當用戶訪問另一個頁面,瀏覽器會把Cookie發送給服務器,於是服務器知道他之前選購了什麼。用戶繼續選購飲料,服務器就在原來那段Cookie里追加新的商品信息。結帳時,服務器讀取發送來的Cookie即可。

Cookie另一個典型的應用是當登錄一個網站時,網站往往會請求用戶輸入用戶名和密碼,並且用戶可以勾選「下次自動登錄」。如果勾選了,那麼下次訪問同一網站時,用戶會發現沒輸入用戶名和密碼就已經登錄了。這正是因為前一次登錄時,服務器發送了包含登錄憑據(用戶名加密碼的某種加密形式)的Cookie到用戶的硬盤上。第二次登錄時,如果該Cookie尚未到期,瀏覽器會發送該Cookie,服務器驗證憑據,於是不必輸入用戶名和密碼就讓用戶登錄了。

Cookie的缺陷

  1. Cookie會被附加在每個HTTP請求中,所以無形中增加了流量。
  2. 由於HTTP請求中的Cookie是明文傳遞的,所以安全性成問題,除非使用超文本傳輸安全協定
  3. Cookie的大小限制在4 KB左右,對於複雜的存儲需求來說是不夠用的。[1]

使用Cookie

ttugvgggğj 用戶可以改變瀏覽器的設置,以使用Cookie。同時一些瀏覽器自帶或安裝開發者工具包允許用戶查看、修改或刪除特定網站的Cookie信息。

識別功能

如果在一台計算機中安裝多個瀏覽器,每個瀏覽器都會以獨立的空間存放Cookie。因為Cookie不但可確認用戶信息,還包含計算機和瀏覽器的信息,所以一個用戶使用不同的瀏覽器登錄或者用不同的計算機登錄,都會得到不同的Cookie信息,另一方面,對於在同一台計算機上使用同一瀏覽器的多用戶群,Cookie不會區分他們的身份,除非他們使用不同的用戶名登錄。

反對Cookie者

一些人反對Cookie在網絡中的應用,他們的理由如下:

識別不精確

如果在同一台機器上使用多個瀏覽器,每個瀏覽器在不同的存儲位置保存Cookie,因此,Cookie並不能定位到一個具體的人,而是用戶、計算機和瀏覽器的組合。

不準確的狀態

如果用戶在取得了一個Cookie之後,點擊了瀏覽器的「回退」按鍵,則瀏覽器的狀態和取得Cookie的狀態就出現了不一致。例如,如果網站基於Cookie技術實現了購物車的應用,當用戶添加了物品後點擊了「回退」按鍵,購物車的物品狀態可能並沒有發生變化。

隱私、安全和廣告

Cookie在某種程度上說已經嚴重危及用戶的隱私安全。其中的一種方法是:一些公司的高層人員為了某種目的(譬如市場調研)而訪問了從未去過的網站(通過搜索引擎查到的),而這些網站包含了一種叫做網頁臭蟲的圖片,該圖片透明,且只有一個像素大小(以便隱藏),它們的作用是將所有訪問過此頁面的計算機寫入Cookie。而後,電子商務網站將讀取這些Cookie信息,並尋找寫入這些Cookie的網站,隨即發送包含了針對這個網站的相關產品廣告的垃圾郵件給這些高級人員。

偷竊Cookie和腳本攻擊

雖然Cookie沒有中電腦病毒那麼危險,但它仍包含了一些敏感訊息:用戶名、電腦名、使用的瀏覽器和曾經訪問的網站。用戶不希望這些內容泄漏出去,尤其是當其中還包含有私人信息的時候。

這並非危言聳聽,跨網站指令碼Cross site scripting)可以達到此目的。在受到跨網站指令碼攻擊時,Cookie盜賊和Cookie投毒將竊取內容。一旦Cookie落入攻擊者手中,它將會重現其價值。

  • Cookie盜賊:搜集用戶Cookie並發給攻擊者的黑客,攻擊者將利用Cookie訊息通過合法手段進入用戶帳戶。
  • Cookie投毒:一般認為,Cookie在儲存和傳回服務器期間沒有被修改過,而攻擊者會在Cookie送回服務器之前對其進行修改,達到自己的目的。例如,在一個購物網站的Cookie中包含了顧客應付的款項,攻擊者將該值改小,達到少付款的目的。

Cookie的替代品

鑑於Cookie的局限和反對者的聲音,有如下一些替代方法:

  • Brownie方案,是一項開放源代碼工程,由SourceForge發起。Brownie曾被用以共享在不同域中的接入,而Cookie則被構想成單一域中的接入。這項方案已經停止開發。
  • P3P,用以讓用戶獲得更多控制個人隱私權利的協議。在瀏覽網站時,它類似於Cookie。這項方案也已經停止開發。
  • 在與服務器傳輸數據時,通過在地址後面添加唯一查詢串,讓服務器識別是否合法用戶,也可以避免使用Cookie。

引用

  1. Mark Pilgrim. HTML5: Up and Running. O』Reilly. 2010. ISBN 978-0596806026.