本頁使用了標題或全文手工轉換

Cookie

維基百科,自由的百科全書
前往: 導覽搜尋

Cookie(複數形態Cookies),中文名稱為「小型文字檔案」或「小甜餅」[1],指某些網站為了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數據(通常經過加密)。定義於RFC2109。是網景公司的前雇員盧·蒙特利英語Lou Montulli在1993年3月的發明[2]

分類[編輯]

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

內存Cookie由瀏覽器維護,保存在內存中,瀏覽器關閉後就消失了,其存在時間是短暫的。硬盤Cookie保存在硬盤里,有一個過期時間,除非用戶手工清理或到了過期時間,硬盤Cookie不會被刪除,其存在時間是長期的。所以,按存在時間,可分為非持久Cookie和持久Cookie。

用途[編輯]

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

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

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

Cookie的缺陷[編輯]

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

使用Cookies[編輯]

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

識別功能[編輯]

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

反對Cookies者[編輯]

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

識別不精確[編輯]

  • 識別功能

識別有時候會發生錯誤[編輯]

隱私,安全和廣告[編輯]

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

偷竊Cookies和腳本攻擊[編輯]

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

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

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

Cookies的替代品[編輯]

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

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

外部參考[編輯]

  1. ^ 香港中學會考08年CIT卷一中文版
  2. ^ Schwartz, John. Giving Web a Memory Cost Its Users Privacy. The New York Times. 2001-09-04. 
  3. ^ Mark Pilgrim. HTML5: Up and Running. O』Reilly. 2010. ISBN 978-0596806026.