簡介
關於為何取名為cookie有多種說法。有人說cookie可能源自海外中國餐館在客人用完餐離開前向客人所贈“幸運小餅乾”,裡面都有一張小字條,印有一張讓客人開心一笑的警句之類的吉祥話,有的還煞有其事的描繪客人的個性特點,為客人卜算前程。想必這也算個人化的信息吧。然而許多人懷疑這種“幸運小餅乾”給網上用戶帶來的未必是好運,因為它窺探用戶的隱私使人如芒在背,感到不安。如果你想知道你電腦中的“小餅乾”記錄了你哪些資料,不妨打開你的電腦硬碟瀏覽器目錄中的“小餅乾”檔案看一下。
Cookies一詞用在程式設計中是一種能夠讓網站伺服器把少量數據儲存到客戶端的硬碟或記憶體,或是從客戶端的硬碟讀取數據的一種技術。從本質上講,它可以看作是你的身份證。保存的信息片斷以"名/值"對(name-value pairs)的形式儲存,一個"名/值"對僅僅是一條命名的數據。
一個網站只能取得它放在你的電腦中的信息,它無法從其它的Cookies檔案中取得信息,也無法得到你的電腦上的其它任何東西。 Cookies中的內容大多數經過了加密處理,因此一般用戶看來只是一些毫無意義的字母數字組合,只有伺服器的CGI處理程式才知道它們真正的含義。
由於Cookies是我們瀏覽的網站傳輸到用戶計算機硬碟中的文本檔案或記憶體中的數據,因此它在硬碟中存放的位置與使用的作業系統和瀏覽器密切相關。在Windows 9X系統計算機中,Cookies檔案的存放位置為C:/Windows/Cookies,在Windows NT/2000/XP的計算機中,Cookies檔案的存放位置為C:/Documents and Settings/用戶名/Cookies,在Windows Vista/7的計算機中,Cookies檔案的存放位置為C:\Users\user\AppData\Roaming\Microsoft\Windows\Cookies\Low。
硬碟中的Cookies檔案可以被Web瀏覽器讀取,它的命名格式為:用戶名@網站地址[數字].txt。如筆者計算機中的一個Cookies檔案名稱為:ch@163[1].txt。要注意的是:硬碟中的Cookies屬於文本檔案,不是程式。
設定
你可以在IE的"工具/Internet選項"的"常規"選項卡中,選擇"設定/查看檔案",查看所有保存到你電腦里的Cookies。這些檔案通常是以user@domain格式命名的,user是你的本地用戶名,domain是所訪問的網站的域名。如果你使用NetsCape瀏覽器,則存放在"C:/PROGRAMFILES/NETS- CAPE/USERS/"裡面,與IE不同的是,NETSCAPE是使用一個Cookie檔案記錄所有網站的Cookies。
我們可對Cookie進行適當設定:打開"工具/Internet選項"中的"隱私"選項卡(注意該設定只在IE6.0中存在,其他版本IE可以單擊"工具/Internet選項" "安全"標籤中的"自定義級別"按鈕,進行簡單調整),調整Cookie的安全級別。通常情況,可以調整到"中高"或者"高"的位置。多數的論壇站點需要使用Cookie信息,如果你從來不去這些地方,可以將安全級調到"阻止所有Cookies";如果只是為了禁止個別網站的Cookie,可以單擊"編輯"按鈕,將要禁止的網站添加到列表中。在"高級"按鈕選項中,你可以對第一方Cookie和第三方的Cookie進行設定,第一方Cookie是你正在瀏覽的網站的Cookie,第三方Cookie是非正在瀏覽的網站發給你的Cookie,通常要對第三方Cookie選擇"拒絕"。你如果需要保存Cookie,可以使用IE的"導入導出"功能,打開"檔案/導入導出",按提示操作即可。
寫入與讀取
Cookies集合是附屬於Response對象及Request對象的數據集合,使用時需要在前面加上Response或Request。
用於給客戶機傳送Cookies的語法通常為:
當給不存在的Cookies集合設定時,就會在客戶機創建,如果該Cookies己存在,則會被代替。由於Cookies是作為HTTP傳輸的頭信息的一部分發給客戶機的,所以向客戶機傳送Cookies的代碼一般放在傳送給瀏覽器的HTML檔案的標記之前。
如果用戶要讀取Cookies,則必須使用Request對象的Cookies集合,其使用方法是: 需要注意的是,只有在伺服器未被下載任何數據給瀏覽器前,瀏覽器才能與Server進行Cookies集合的數據交換,一旦瀏覽器開始接收Server所下載的數據,Cookies的數據交換則停止,為了避免錯誤,要在程式和前面加上response.Buffer=True。
套用
幾乎所有的網站設計者在進行網站設計時都使用了Cookie,因為他們都想給瀏覽網站的用戶提供一個更友好的、人文化的瀏覽環境,同時也能更加準確地收集訪問者的信息。
網站瀏覽人數管理
由於代理伺服器、快取等的使用,能幫助網站精確統計來訪人數的方法就是為每個訪問者建立一個的ID。使用Cookie,網站可以完成以下工作:測定多少人訪問過;測定訪問者中有多少是新用戶(即第一次來訪),多少是老用戶;測定一個用戶多久訪問一次網站。
通常情況下,網站設計者是藉助後台資料庫來實現以上目的的。當用戶第一次訪問該網站時,網站在資料庫中建立一個新的ID,並把ID通過Cookie傳送給用戶。用戶再次來訪時,網站把該用戶ID對應的計數器加1,得到用戶的來訪次數或判斷用戶是新用戶還是老用戶。
按照用戶的喜好定製網頁外觀
有的網站設計者,為用戶提供了改變網頁內容、布局和顏色的權力,允許用戶輸入自己的信息,然後通過這些信息對網站的一些參數進行修改,以定製網頁的外觀。
在電子商務站點中實現諸如"購物籃"等功能
可以使用Cookie記錄用戶的ID,這樣當你往"購物籃"中放了新東西時,網站就能記錄下來,並在網站的資料庫里對應著你的ID記錄當你"買單"時,網站通過ID檢索資料庫中你的所有選擇就能知道你的"購物籃"里有些什麼。
在一般的事例中,網站的資料庫能夠保存的有你所選擇的內容、你瀏覽過的網頁、你在表單里填寫的信息等;而包含有你的ID的Cookie則保存在你的電腦里。
缺陷
Cookie雖然被廣泛的套用,並能做到一些使用其它技術不可能實現的功能。但也存在一些不夠完美的方面,給套用帶來不便。
多人共用一台電腦的問題
任何公共場合的電腦或者許多在辦公室或家裡使用的電腦,都會同時被兩個以上的人使用。這樣,當你用它在網上超市購物時,網上超市或網站會在這台機器上留下一個Cookie,將來也許就會有某個人試圖使用你的賬戶購物,帶來了不安全的可能。當然,在一些使用多用戶作業系統如Windows NT或UNIX的電腦上,這並不會成為一個問題。因為在多用戶作業系統下不同的賬戶的Cookie分別放在不同的地方。
Cookies被刪除時
假如你的瀏覽器不能正常工作,你可能會刪除電腦上所有的臨時Internet檔案。然而,一旦這樣操作以後,你就會丟掉所有的Cookies檔案。當你再次訪問一個網站時,網站會認為你是一位新用戶並分配給你一個新的用戶ID以及一個新的Cookie。結果將會造成網站統計的新老用戶比發生偏差,而你也難以恢復過去保存的參數選擇。
一人使用多台電腦時
有的人一天之中經常使用一台以上的電腦。例如在辦公室里有一台電腦、家裡有一台、還有移動辦公用的筆記本電腦。除非網站使用了特別的技術來解決這一問題,否則,你將會有三個不同的Cookies檔案在這三台機器上,而在三台機器上訪問過的任何網站都將會把你看成三個不同的用戶。
PHP Cookies
cookie 常用於識別用戶。cookie 是一種伺服器留在用戶計算機上的小檔案。每當同一台計算機通過瀏覽器請求頁面時,這台計算機將會傳送 cookie。通過 PHP,您能夠創建並取回 cookie 的值。
如何創建 Cookie?
setcookie() 函式用於設定 cookie。
注釋:setcookie() 函式必須位於 <html> 標籤之前。
語法:
setcookie(name, value, expire, path, domain);
在下面的例子中,我們將創建名為 "user" 的 cookie,並為它賦值 "Alex Porter"。我們也規定了此 cookie 在一小時後過期:
注釋:在傳送 cookie 時,cookie 的值會自動進行 URL 編碼,在取回時進行自動解碼。(為防止 URL 編碼,請使用 setrawcookie() 取而代之。)
如何取回 Cookie 的值?
PHP 的 $_COOKIE 變數用於取回 cookie 的值。
在下面的實例中,我們取回了名為 "user" 的 cookie 的值,並把它顯示在了頁面上:
在下面的實例中,我們使用 isset() 函式來確認是否已設定了 cookie:
如何刪除 Cookie?
當刪除 cookie 時,您應當使過期日期變更為過去的時間點。
刪除的實例:
防範泄密
想知道你訪問的網站是否在你的硬碟或記憶體中寫入了Cookies信息嗎?只需執行下面的操作步驟,就可以了解和控制你正在訪問的網站的Cookies信息。
步驟一點擊IE視窗中的"工具" "Internet選項",打開"Internet選項"設定視窗;
步驟二點擊"Internet選項"設定視窗中的"安全"標籤,然後再點擊"自定義級別"按鈕,進入"安全設定"視窗;
步驟三 找到"安全設定"視窗中的"Cookies"設定項。"Cookies"設定項下有兩個分選項,其中"允許使用存儲在您計算機上的Cookies"是針對存儲在用戶計算機硬碟中的Cookies檔案;"允許使用每個對話Cookies(未存儲)"是針對存儲在用戶計算機記憶體中的Cookies信息。存儲在硬碟中的Cookies檔案是永久存在的,而存儲在記憶體中的Cookies信息是臨時的。要想IE在即將接收來自Web站點的所有Cookies時進行提示,可分別選擇上面兩個分選項中的"提示"項。當然,你也可以選擇"啟用",允許IE接受所有的Cookies信息(這也是IE的默認選項);選擇"禁止",則是不允許Web站點將Cookies存儲到您的計算機上,而且Web站點也不能讀取你計算機中已有的Cookies。
IE6.0提供了更為可靠的個人隱私及安全保護措施,可以讓用戶來控制瀏覽器向外傳送信息的多少。在"Internet 選項"視窗中新增了"隱私"選項卡(圖1),用戶可以在其中直接設定瀏覽時的隱私級別,按需要控制其他站點對自己電腦所使用的Cookies。
如果我們正在瀏覽的站點使用了Cookie,那么在瀏覽器狀態欄中會有一個黃色驚嘆號的標記,雙擊後可打開"隱私報告"對話框,用戶可以在其中查看具體的隱私策略,還可直接點擊"設定"按鈕後在上述"隱私"選項卡中調節安全隱私級別。
在"常規"選項卡中還增加了"刪除Cookies"按鈕(圖2),方便用戶直接清除本機上的Cookies。另外,在"工具" "選項" "高級"選項卡中也增加了一些進一步提高安全性的選項(如關閉瀏覽器時清空Internet臨時檔案)。其實,如何更好地保護個人隱私和安全是微軟下一代".NET"戰略軟體中的關鍵技術,IE6.0已經嘗試著邁出了第一步。
另外,由於Cookies的信息並不都是以檔案形式存放在計算機里,還有部分信息保存在記憶體里。比如你在瀏覽網站的時候,Web伺服器會自動在記憶體中生成Cookie,當你關閉IE瀏覽器的時候又自動把Cookie刪除,那樣上面介紹的兩種方法就起不了作用,我們需要藉助註冊表編輯器來修改系統設定。要注意的是,修改註冊表前請作備份,以便出現問題後能順利恢復。
運行Regedit,找到如下鍵值:HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Cache/Special Paths/Cookies,這是Cookies在記憶體中的鍵值,把這個鍵值刪除。至此Cookies無論以什麼形式存在,我們都不用再害怕了。
最後有必要說明的一點是:杜絕Cookies雖然可以增強你電腦的信息安全程度,但這樣做同樣會有一些弊端。比如在一些需要Cookies支持的網頁上,會發生一些莫名其妙的錯誤,典型的例子就是你以後不能使用某些網站的免費信箱了。
欺騙
通過分析Cookie的格式,我們知道,最後兩項中分別是它的URL路徑和域名,伺服器對Cookie的識別靠的就是這兩個參數。正常情況下,我們要瀏覽一個網站時輸入的URL便是它的域名,需要經過域名管理系統DNS將其轉化為IP位址後進行連線。若能在DNS上進行一些設定,把目標域名的IP位址對應到其它站點上,我們便可以非法訪問目標站點的Cookie了。
要進行Cookies欺騙,其實很簡單。比如在Win9X下的安裝目錄下,有一名為hosts.sam的檔案,以文本方式打開後會看到這樣的格式:
127.0.0.1localhost
經過設定,便可以實現域名解析的本地化,只需將IP和域名依上面的格式添加到檔案中並另外儲存為hosts即可。hosts檔案實際上可以看成一個本機的DNS系統,它可以負責把域名解釋成IP位址,它的優先權比DNS伺服器要高,它的具體實現是TCP/IP協定中的一部分。
總之,在某種程度上雖然可以實現Cookies的欺騙,給網路套用帶來不安全的因素,但Cookies檔案本身並不會造成用戶隱私的泄露,也不會給黑客提供木馬程式的載體,只要合理使用,它們會給網站管理員進行網站的維護和管理以及廣大用戶的使用都帶來便利。
集合的屬性
1.Expires屬性:此屬性用來給Cookies設定一個期限,在期限內只要打開網頁就可以調用被保存的Cookies,如果過了此期限Cookies就自動被刪除。如:
設定Cookies的有效期到2004年4月1日,到時將自動刪除。如果一個Cookies沒有設定有效期,則其生命周期從打開瀏覽器開始,到關閉瀏覽器結束,每次運行後生命周期將結束,下次運行將重新開始。
2.Domain屬性:這個屬性定義了Cookies傳送數據的唯一性。若只將某Cookies傳送給_blank">搜狐主頁時,則可使用如下代碼:
3.Path屬性:定義了Cookies只發給指定的路徑請求,如果Path屬性沒有被設定,則使用套用軟體的預設路徑。
4.Secure屬性:指定Cookies能否被用戶讀取。
5.Haskeys屬性:如果所請求的Cookies是一個具有多個鍵值的Cookies字典,則返回True,它是一個唯讀屬性
偷竊和腳本攻擊
儘管cookies沒有病毒那么危險,但它仍包含了一些敏感信息:用戶名,計算機名,使用的瀏覽器和曾經訪問的網站。用戶不希望這些內容泄漏出去,尤其是當其中還包含有私人信息的時候。
這並非危言聳聽,一種名為Cross site scripting的工具可以達到此目的。在受到Cross site scripting攻擊時,cookie盜賊和cookie毒藥將竊取內容。一旦cookie落入攻擊者手中,它將會重現其價值。
cookie盜賊:蒐集用戶cookie並發給攻擊者的黑客。攻擊者將利用cookie信息通過合法手段進入用戶帳戶。
cookie毒藥:利用安全機制,攻擊者加入代碼從而改寫cookie內容,以便持續攻擊。
替代品
鑒於cookie的局限和反對者的聲音,有如下一些替代方法:
Brownie方案,是一項開放原始碼工程,由SourceForge發起。Brownie曾被用以共享在不同域中的接入,而cookies則被構想成單一域中的接入。這項方案已經停止開發。
P3P,用以讓用戶獲得更多控制個人隱私權利的協定。在瀏覽網站時,它類似於cookie。
在與伺服器傳輸數據時,通過在地址後面添加唯一查詢串,讓伺服器識別是否合法用戶,也可以避免使用cookie。
使用和禁用
用戶可以改變瀏覽器的設定,以使用或者禁用Cookies
微軟 Internet Explorer
工具 > Internet選項 > 隱私頁
調節滑塊或者點擊“高級”,進行設定。
Mozilla Firefox
工具 > 選項 > 隱私
(註:在Linux版本中,可能會是如下操作:編輯 > 屬性 > 隱私 , 而Mac則是:Firefox > 屬性 > 隱私)
設定Cookies選項
設定阻止/允許的各個域內Cookie
查看Cookies管理視窗,檢查現存Cookie信息,選擇刪除或者阻止它們
蘋果計算機 Safari
Safari > 預置 > 安全標籤
選擇以下的選項
總是 接受 Cookies
永不 接受 Cookies
接受 Cookies 僅從您瀏覽的站點 (例如,不接受來自其它站點的廣告) 預設的選項。
您可以顯示所有駐留在您瀏覽器中的 cookies,也可隨時將它們之一刪除。
NETSCAPE
“PREFERENCE\ADVANCED\COOKIES”,在出現的視窗中有三個選項,選擇“DISABLECOOKIES”即可關閉COOKIE。在IE中,選擇“查看”/“INTERNET選項”/“高級",在隨後出現的視窗中找到“COOKIES”一項,選擇“禁止所有的COOKIE 使用”可關閉COOKIE。
如果沒有設定cookie列表,請記住在域名前面加入“。”
識別功能
如果在一台計算機中安裝多個瀏覽器,每個瀏覽器都會以獨立的空間存放cookie。因為cookie中不但可以確認用戶,還能包含計算機和瀏覽器的信息,所以一個用戶用不同的瀏覽器登錄或者用不同的計算機登錄,都會得到不同的cookie信息,另一方面,對於在同一台計算機上使用同一瀏覽器的多用戶群,cookie不會區分他們的身份,除非他們使用不同的用戶名登錄。Cookies是一種能夠讓網站伺服器把少量數據儲存到客戶端的硬碟或記憶體,或是從客戶端的硬碟讀取數據的一種技術。
謠言
謠言:Cookies在暗中監視你的一舉一動
就像我們知道的一樣,Cookies的內容是你所訪問的網站所存儲的。所以,除非你主動將你的信息給某個網站,或你早已把個人信息給這個網站,否則Cookies中不可能包含你的私人信息。
大多數的Cookies都像會話標記一樣簡單,但有時它包含你的登入證書,其通常被加密或為一定格式的散列值。因為Cookies只會傳送回和其產生時相同的網站,就算它包含了一些私人信息,這些信息也不會和所有你訪問的網站共享。
謠言:Cookies是病毒或間諜軟體
Cookies僅僅是一些文本檔案而已,它並不能夠被執行,甚至你可以在隱藏資料夾中找到它們。但令人驚訝的是居然有許多人認為Cookies包含病毒或間諜軟體。其主要原因不僅是受愚蠢的電視媒體的錯誤認識所影響,也可能因為大多數反間諜軟體在掃描時都會捕獲跟蹤Cookies。這是為什麼呢?因為從Cookies會被廣告網站用於跟蹤、分析你訪問過的網站,所以大多數反間諜軟體幫助你移除它們。
另一個謠言是Cookies導致了垃圾郵件、廣告彈出視窗。廣告提供商可以使用Cookies的信息決定給你推送哪些廣告,但是Cookies自己本身無法產生廣告。
事實
事實:幾乎登入所有網站都要用到Cookies
絕大多數網站都要求啟用Cookies,這是為了讓你創建的賬號可以保持登入狀態。因此,如果你禁用Cookies,絕大多數的網站都將無法使用。但是有一些網站另外,你可能已經注意到,一些購物網站將會話標誌嵌入到超連結(URL)中,這些網站在禁用Cookies時仍然可以使用,但這並不意味著所有網站都實現了這一功能。這些Cookies被稱為第一方Cookies,因為它們在你主動訪問一個網站時被記錄。
事實:Cookies被廣告提供商利用
因為Cookies總是發回給產生它的原始站點,所以廣告提供商的Cookies將會被發回給使用這個廣告提供商的所有網站。這讓廣告提供商可以跟蹤你訪問的網站,從而基於你訪問網站的類型,給你傳送針對性的廣告。
但這並不意味著廣告提供商可以讀取所有你訪問過網站的Cookies,他們僅僅可以訪問他們自己的存儲的Cookies而已。但是因為廣告的Javascript代碼是嵌入到頁面中的,故提供商將會知道你訪問了這個頁面。這些Cookies被稱為第三方Cookies,因為它們並不是被你真正訪問的頁面存儲,而且他們通常可以被攔截,而不會產生任何嚴重的問題。
如果這種類型的最終讓你寢食難安,那么你需要知道其實廣告提供商早已可以根據你的IP位址、瀏覽器版本、地點等因素跟蹤你所訪問的網站。所以擺脫跟蹤Cookies僅僅消除了網上行為被跟蹤的一小部分困擾。而且僅僅只有一小部分足夠大的廣告提供商會跟蹤你訪問過的網站,可以說Google已經知道任何你在網路上做的事情。
事實:刪除禁用Cookies會帶來更多廣告
如果你並不經常訪問一個網站,你可能會看到一個插播廣告擋住了整個頁面,除非你點擊它,不然它不會關閉。你可能會想如何規定誰會看到這些廣告,什麼時候會看到這些廣告。
它們是這樣工作的:擋住整個頁面的插播廣告需要支付高額的廣告費用,但是因為大多數網站所有者都知道這種廣告太令人討厭了,所以它們通常會按照一定比例限制其出現的頻率,所以同一個人並不會經常看到這種廣告。當你看到一次這種廣告時,廣告提供商會在你的電腦上存儲Cookies,確保在一段時間內你不會再次看到這個討厭的廣告。如果你定期清理Cookies,你可能會比其他人更加頻繁的看到這種插播廣告。當然,這是在你沒有安裝廣告攔截器的情況下。
事實:禁用Cookies不禁用Flash不起任何作用
即使你禁用瀏覽器Cookies,廣告提供商利用Flash Cookies仍然可以跟蹤的瀏覽行為。事實上,超過半數的流行站點使用Flash跟蹤Cookies,這意味著即使你使用瀏覽器的隱私模式,依然不能阻止他們跟蹤你的行為。
事實:嘗試只禁用第三方Cookies
如果你仍然擔心Cookies會導致隱私問題,那么你可以將你的瀏覽器設定為只接受第一方Cookies,這樣你仍然可以順利登入你所訪問的網站。對於第三方覽器來說,只需要進入選項視窗,點擊“隱私”標籤,取消“接受第三方Cookies”的勾選即可。如果導致了任何問題,你可以保持這個選項被勾選,但是更改設定為退出瀏覽器時自動刪除Cookies。其他瀏覽器的設定方式類似,只需要進入選項頁面中找到它們即可。據安全隱患,建立數據防泄漏體系才是保護數據最徹底、最有效的方式。許多企業已經認識到數據加密的重要性。但是由於數據加密軟體技術水平良莠不齊,企業自身預算緊張等原因,許多企業對於數據防泄漏體系是一拖再拖。直到數據真的丟失,才萬分後悔。