COOKIE

COOKIE

儲存在用戶本地終端的數據
Cookie,複數形态Cookies,中文名稱為小型文本文件。指某些網站為了辨别用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。定義于RFC2109(已廢除)。為網景公司的前雇員Lou Montulli在1993年3月所發明。Cookie是由服務器端生成,發送給User-Agent(一般是浏覽器),浏覽器會将Cookie的key/value保存到某個目錄下的文本文件内,下次請求同一網站時就發送該Cookie給服務器(前提是浏覽器設置為啟用cookie)。Cookie名稱和值可以由服務器端開發自己定義,對于JSP而言也可以直接寫入jsessionid,這樣服務器可以知道該用戶是否合法用戶以及是否需要重新登錄等,服務器可以設置或讀取Cookies中包含信息,借此維護用戶跟服務器會話中的狀态。
  • 中文名:
  • 外文名:
  • 拼音:
  • 近義詞:
  • 反義詞:
  • 英文名:Cookie
  • 複數形式:Cookies
  • 發明人:Lou Montulli
  • 發明時間:1993年3月

簡介

Cookie是一小段文本信息,伴随着用戶請求和頁面在Web服務器和浏覽器之間傳遞。Cookie包含每次用戶訪問站點時Web應用程序都可以讀取的信息。因為HTTP協議是無狀态的,對于一個浏覽器發出的多次請求,WEB服務器無法區分是不是來源于同一個浏覽器。所以,需要額外的數據用于維護會話。Cookie正是這樣的一段随HTTP請求一起被傳遞的額外數據。

Cookie隻是一段文本,所以它隻能保存字符串。而且浏覽器對它有大小限制以及它會随着每次請求被發送到服務器,所以應該保證它不要太大。 Cookie的内容也是明文保存的,有些浏覽器提供界面修改,所以,不适合保存重要的或者涉及隐私的内容。

分類

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

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

主要用途

因為HTTP協議是無狀态的,即服務器不知道用戶上一次做了什麼,這嚴重阻礙了交互式Web應用程序的實現。Cookie就是用來繞開HTTP的無狀态性的“額外手段”之一。服務器可以設置或讀取Cookies中包含信息,借此維護用戶跟服務器會話中的狀态。

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

另一個重要應用場合是“購物車”之類處理。用戶可能會在一段時間内在同一家網站的不同頁面中選擇不同的商品,這些信息都會寫入Cookies,以便在最後付款時提取信息。

相關設置

相關函數

PHP用SetCookie函數來設置Cookie。必須注意的一點是:Cookie是HTTP協議頭的一部分,用于浏覽器和服務器之間傳遞信息,所以必須在任何屬于HTML文件本身的内容輸出之前調用Cookie函數。SetCookie 函數定義了一個Cookie,并且把它附加在HTTP頭的後面,SetCookie函數的原型如下:int SetCookie(string name,string value,int expire,string path,string domain,int secure);

除了name之外所有的參數都是可選的。value,path,domain 三個參數可以用空字符串代換,表示沒有設置;expire和 secure兩個參數是數值型的,可以用0表示。expire參數是一個标準的Unix時間标記,可以用time()或mktime() 函數取得,以秒為單位。secure參數表示這個Cookie是否通過加密的HTTPS協議在網絡上傳輸。當前設置的Cookie 不是立即生效的,而是要等到下一個頁面時才能看到.這是由于在設置的這個頁面裡Cookie由服務器傳遞給客戶浏覽器,在下一個頁面浏覽器才能把Cookie從客戶的機器裡取出傳回服務器的原因。在同一個頁面設置Cookie,實際是從後往前,所以如果要在插入一個新的Cookie之前删掉一個,你必須先寫插入的語句,再寫删除的語句,否則可能會出現不希望的結果。

使用舉例

來看幾個例子:

簡單的:

SetCookie("MyCookie","Value of MyCookie");

帶失效時間的:

SetCookie("WithExpire","Expire in 1 hour",time()+3600);//3600秒=1小時

什麼都有的:

這裡還有一點要說明的,比如你的站點有幾個不同的目錄,那麼如果隻用不帶路徑的Cookie的話,在一個目錄下的頁面裡設的Cookie在另一個目錄的頁面裡是看不到的,也就是說,Cookie是面向路徑的。實際上,即使沒有指定路徑,WEB 服務器會自動傳遞當前的路徑給浏覽器的,指定路徑會強制服務器使用設置的路徑。解決這個問題的辦法是在調用SetCookie時加上路徑和域名,域名的格式可以是SetCookie函數裡表示value的部分,在傳遞時會自動被encode,也就是說,如果value的值是“test value”在傳遞時就變成了“test%20value”,跟URL的方法一樣。當然,對于程序來說這是透明的,因為在PHP接收Cookie的值時會自動将其decode。

如果要設置同名的多個Cookie,要用數組,方法是:

SetCookie("CookieArray[]","Value 1");

SetCookie("CookieArray[]","Value 2");

SetCookie("CookieArray[0]","Value 1");

SetCookie("CookieArray[1]","Value 2");

接收和處理Cookie

PHP對Cookie的接收和處理的支持非常好,是完全自動的,跟FORM變量的原則一樣,特别簡單。比如設置一個名為MyCookier的Cookie,PHP會自動從WEB服務器接收的HTTP頭裡把它分析出來,并形成一個與普通變量一樣的變量,名為$myCookie,這個變量的值就是Cookie的值。數組同樣适用。

另外一個辦法是引用PHP的全局變量$HTTP_COOKIE_VARS數組。

分别舉例如下:(假設這些都在以前的頁面裡設置過了,并且仍然有效)

echo $MyCookie

echo $CookieArray[0];

echo count($CookieArray);

echo $HTTP_COOKIE_VARS["MyCookie"];

就這麼簡單。

限制

大多數浏覽器支持最大為4096字節的Cookie。由于這限制了Cookie的大小,所以隻好用Cookie來存儲少量數據,或者存儲用戶ID之類的标識符。用戶ID随後便可用于标識用戶,以及從數據庫或其他數據源中讀取用戶信息。浏覽器還限制站點可以在用戶計算機上存儲的Cookie的數量。大多數浏覽器隻允許每個站點存儲20個Cookie;如果試圖存儲更多Cookie,則最舊的Cookie便會被丢棄。有些浏覽器還會對它們将接受的來自所有站點的Cookie總數作出絕對限制,通常為300個。

生存周期

Cookie可以保持登錄信息到用戶下次與服務器的會話,換句話說,下次訪問同一網站時,用戶會發現不必輸入用戶名和密碼就已經登錄了(當然,不排除用戶手工删除Cookie)。而還有一些Cookie在用戶退出會話的時候就被删除了,這樣可以有效保護個人隐私。

Cookie在生成時就會被指定一個Expire值,這就是Cookie的生存周期,在這個周期内Cookie有效,超出周期Cookie就會被清除。有些頁面将Cookie的生存周期設置為“0”或負值,這樣在關閉浏覽器時,就馬上清除Cookie,不會記錄用戶信息,更加安全。

使用和禁用

用戶可以改變浏覽器的設置,以使用或者禁用Cookies。

GoogleChrome

“自定義和控制”(浏覽器地址欄右側的扳手圖标) > 選項(設置) > 高級選項(顯示高級設置)

通過cookie設置,更改cookie設置(隐私權說明 > 内容設置 > Cookie(允許站點存儲本機數據 (建議)

Konqueror

如果沒有設置cookie列表,請記住在域名前面加入“.”,例如.wikipedia.org,否則wikipedia将不會讀取cookie(針對KDE 3.3)。

微軟

工具 > Internet選項 > 隐私頁調節滑塊或者點擊“高級”,進行設置。

MozillaFirefox

工具 > 選項 > 隐私(注:在Linux版本中,可能會是如下操作:編輯 > 屬性 > 隐私, 而Mac則是:Firefox > 偏好 > 隐私)

設置Cookies選項

設定阻止/允許的各個域内Cookie

查看Cookies管理窗口,檢查現存Cookie信息,選擇删除或者阻止它們

Opera

按F12彈出一個菜單,從中可以快速設置允許或禁用cookie。

更多設置項目在 首選項 > 高級 > cookie

也可對不同域作不同的cookie設置。在網頁空白處 按右鍵 > 編輯站點首選項 > cookie

蘋果公司Safari

Safari > 預置 > 安全标簽

選擇以下的選項

總是 接受 Cookies

永不 接受 Cookies

接受 Cookies 僅從您浏覽的站點(例如,不接受來自其它站點的廣告)默認的選項

您可以顯示所有駐留在您浏覽器中的 cookies,也可随時将它們之一删除。

Cookies弊端

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

識别不精确

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

隐私、安全和廣告

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

偷竊Cookies和腳本攻擊

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

這并非危言聳聽,跨站點腳本(Cross site scripting)可以達到此目的。在受到跨站點腳本攻擊時,cookie盜賊和cookie毒藥将竊取内容。一旦cookie落入攻擊者手中,它将會重現其價值。

Cookie盜賊:搜集用戶cookie并發給攻擊者的黑客。攻擊者将利用cookie信息通過合法手段進入用戶帳戶。

Cookie投毒:一般認為,Cookie在儲存和傳回服務器期間沒有被修改過,而攻擊者會在cookie送回服務器之前對其進行修改,達到自己的目的。例如,在一個購物網站的cookie中包含了顧客應付的款項,攻擊者将該值改小,達到少付款的目的。這就是cookie投毒。

替代品

鑒于cookie的局限和反對者的聲音,有如下一些替代方法:

Brownie方案,是一項開放源代碼工程,由SourceForge發起。Brownie曾被用以共享在不同域中的接入,而cookies則被構想成單一域中的接入。這項方案已經停止開發。

p3p,用以讓用戶獲得更多控制個人隐私權利的協議。在浏覽網站時,它類似于cookie。

在與服務器傳輸數據時,通過在地址後面添加唯一查詢串,讓服務器識别是否合法用戶,也可以避免使用cookie。

隐私洩漏

跨站Cookie

實際上,Cookie中保存的用戶名、密碼等個人敏感信息通常經過加密,很難将其反向破解。但這并不意味着絕對安全,黑客可通過木馬病毒盜取用戶浏覽器Cookie,直接通過偷取的Cookie騙取網站信任。可以看出,木馬病毒入侵用戶電腦是導緻用戶個人信息洩露的一大元兇。

自1993年Cookie誕生以來,其就擁有專屬性原則,即A網站存放在Cookie中的用戶信息,B網站是沒有權限直接獲取的。但是,一些第三方廣告聯盟的代碼使用範圍很廣。這就造成用戶在A網站搜索了一個關鍵字,用戶繼續訪問B網站,由于B網站也使用了同一家的第三方廣告代碼,這個代碼可以從Cookie中獲取用戶在A網站的搜索行為,進而展示更精準的推廣廣告。比如搜索“糖尿病”等關鍵詞,再訪問其聯盟網站,頁面會立刻出現糖尿病治療廣告。如果并未事先告之,經用戶同意,此做法有對隐私構成侵犯的嫌疑。這個還處在灰色地帶。

因此,跨站Cookie恰恰就是用戶隐私洩露的罪魁禍首,所以限制網站使用跨站Cookie,給用戶提供禁止跟蹤(DNT)功能選項已成為當務之急。據了解,IE、Chrome、360、搜狗等浏覽器均可以快速清除用戶浏覽器網頁的Cookie信息。但從整體的隐私安全保護環境來看,安全軟件仍然存在着巨大的防護缺口。所以安全軟件也可以并且有必要提供定期清理網站Cookie,并監測跨站Cookie使用的功能,保護用戶隐私安全。

超級Cookies

英國倫敦的一名軟件開發者已發現了一串代碼,能在浏覽器的隐私模式中執行普通會話,這将導緻隐私模式的失效。

目前,所有主流浏覽器都提供了隐私保護模式。在這種模式下,網站的Cookies無法追蹤用戶身份。例如,谷歌Chrome浏覽器提供了名為“Incognito”的功能,而火狐浏覽器則提供了“隐私窗口”功能。

不過,新發現的這一漏洞将導緻浏覽器隐私模式的失效。例如,當用戶使用普通浏覽器,在亞馬遜網站上購物或浏覽Facebook時,用戶可能會啟動一個隐私窗口,去浏覽存在争議内容的博客。如果這一博客使用了與亞馬遜同樣的廣告網絡,或是集成了Facebook的“點贊”按鈕,那麼廣告主和Facebook可以知道,用戶在訪問亞馬遜和Facebook的同時也訪問了這一争議博客。

對于這一漏洞,用戶有一個臨時解決辦法,但是比較麻煩:用戶可以在啟動隐私模式之前删除所有Cookies文件,或者使用一個專門的浏覽器,完全在隐私模式下進行浏覽。諷刺的是,這一漏洞是由于一項旨在加強隐私保護的功能所引起的。

如果用戶在浏覽器地址欄使用前綴https://,為某些網站的通信加密,那麼一些浏覽器會對此進行記憶。浏覽器會保存一個“超級Cookie”,從而确保當用戶下次連接該網站時,浏覽器會自動進入https通道。即使用戶啟用了隐私模式,這一記憶仍會存在。

與此同時,這樣的超級Cookie也允許第三方網絡程序,例如廣告和社交媒體按鈕,對用戶進行記憶。

發現這一漏洞的獨立研究員薩姆·格林哈爾(Sam Greenhelgh)在博客中表示,這種功能還沒有被任何公司所使用。不過在這種方式被公開之後,沒有任何辦法去阻止各家公司這樣做。

在線隐私軟件公司Abine聯合創始人尤金·庫茲涅佐夫(Eugene Kuznetsov)認為,這種“超級Cookie”将成為下一代追蹤工具。這種工具脫胎于Cookies,但變得更加複雜。目前,用戶在浏覽過程中總是會存在設備唯一識别碼,以及具有唯一性的浏覽器指紋,這些痕迹很難被擦除。

由于“超級Cookie”的存在,互聯網匿名性變得更加困難。庫茲涅佐夫表示:“我們已經看到了關于隐私保護的軍備競賽。追蹤互聯網用戶的願望就像是寄生蟲。你浏覽器中的任何内容都在被網站和廣告主審視,從而實現更多的追蹤。”Mozilla已經在最新版火狐浏覽器中對此進行了修複,而谷歌則傾向于使Chrome維持原狀。谷歌已經知道了“超級Cookie”帶來的問題,但仍選擇繼續啟用Chrome的https記憶功能。在安全性和隐私保護之間,谷歌選擇了前者。

微軟IE浏覽器并不存在這樣的問題,因為這款浏覽器并未内建https記憶功能。格林哈爾還表示,在iOS設備上,“超級Cookie”帶來的問題同樣存在。

央視315曝光

2013年3月15日晚,央視315在行動晚會曝光了網易同意第三方公司加代碼,獲取用戶cookie信息,追蹤用戶上網行為。在央視315晚會上,“Cookie跟蹤洩漏隐私”被當成驚世駭俗的侵權行為。報道稱,為了對廣告效果進行監測,一些網站的确同意第三方公司加代碼。第三方公司通過植入代碼、獲取cookie,就可以鎖定用戶,精準投放廣告。

上一篇:泥垢

下一篇:clone

相關詞條

相關搜索

其它詞條