網絡Cookie工作原理
引言
雖然大多數網絡Cookie使用起來相當簡單,但是它們也有自己獨特的原理。由于涉及到互聯網隱私問題,Cookie從2000年就開始受到廣大媒體的關注,直到現在仍存在著激烈的爭論。
然而,Cookie提供了使Web更加容易導航的能力。幾乎每個網站的設計人員都會使用Cookie,因為它們能夠提供更好的用戶體驗,并使得收集有關網站訪問者的準確信息變得非常容易。
在本文中,我們將了解Cookie背后的基本技術及其支持的一些功能。
Cookie基本知識
2000年4月,筆者在一家頗有規模和影響力的報紙上閱讀了一篇有關深入探討互聯網隱私的文章,文中對Cookie進行了定義。定義大致是這樣的:
- Cookie是網站放置在硬盤上的程序。它們駐留在計算機上,用于收集有關您和您在互聯網上執行的任何操作的信息,只要網站需要,就可以下載此Cookie收集的所有信息。
類似這樣的定義在新聞報道中相當普遍,而問題在于所有這些信息都是錯誤的。Cookie不是程序,不能像運行程序一樣運行。因此,Cookie自己不能收集任何信息,也不能從您的計算機上收集與您有關的任何個人信息。
下面是Cookie的正確定義:Cookie是指Web服務器可以在用戶的硬盤上存儲的一段文本。Cookie允許網站將信息存儲在用戶的計算機上,并在以后檢索此信息。這些信息以名稱/值對的形式存儲。
例如,網站可以為每個訪問者生成唯一的ID號,并使用Cookie文件將此ID號存儲在每個用戶的計算機上。
如果使用微軟的IE瀏覽器來瀏覽頁面,則可以看到存儲在計算機上的所有Cookie。它們通常駐留在名為c:windowscookies的目錄中。當筆者在計算機上查看該目錄時,發現了165個文件,每個文件都是一個包含名稱/值對的文本文件,并且筆者的計算機上存儲了與每個網站相對應的一個文件。
您可以看到這個目錄中的每一個文件都是簡單的普通文本文件,通過查看文件名可以看出是哪個網站將該文件存儲到您的計算機上(這些信息也存儲在文件中)。通過單擊每一個文件,可以將其打開。
例如,筆者訪問過goto.com,該網站已將一個Cookie放置在筆者的計算機上。goto.com對應的Cookie文件包含以下信息:
UserID A9A3BECE0563982D www.goto.com/
Goto.com已在筆者的計算機上存儲了一個名稱/值對。此名稱/值對的名稱為UserID,值為A9A3BECE0563982D。當筆者第一次訪問goto.com時,該網站為筆者分配了一個唯一的ID值,并將其存儲在筆者的計算機上。
(請注意,在上面顯示的三個值之后,可能還有一些其他的值存儲在文件中。這些值是瀏覽器的管理信息。)
Amazon.com在筆者的計算機上存儲的信息更多一些。當查看Amazon在筆者的計算機上創建的Cookie文件時,發現其中包含以下信息:
session-id-time 954242000 amazon.com/
session-id 002-4135256-7625846 amazon.com/
x-main eKQIfwnxuF7qtmX52x6VWAXh@Ih6Uo5H amazon.com/
ubid-main 077-9263437-9645324 amazon.com/
可以看出,Amazon在筆者的計算機上存儲了主用戶ID、每個會話的ID以及會話的開始時間(以及一個不知道表示什么的x-main值)。
大多數網站僅在計算機上存儲一條信息,即用戶ID。但是網站可以根據需要存儲許多名稱/值對。
名稱/值對只是命名的數據段,而不是一個程序,也不能“執行”任何操作。網站只能檢索它放置在計算機上的信息,而無法檢索其他Cookie文件中的信息,也不能檢索計算機上的任何其他信息。
Cookie數據是如何移動的?
如上一節中所述,Cookie數據只是網站存儲在您的硬盤上的一個名稱/值對。所有Cookie數據都是這樣。網站存儲此數據,并在以后接收此數據。一個網站只能接收其存儲在計算機上的數據,該網站不能查看任何其他Cookie或計算機上的任何其他內容。
數據將按以下方式移動:
- 如果在瀏覽器中鍵入一個網站的URL,則瀏覽器會向該網站發送相關網頁的請求(有關討論,請參閱Web服務器工作原理)。例如,如果在瀏覽器中鍵入URLhttp://www.amazon.com,則瀏覽器將聯系Amazon的服務器并請求其主頁。
- 當瀏覽器執行上述操作時,它會在您的計算機上尋找Amazon設置的Cookie文件。如果找到Amazon Cookie文件,瀏覽器就會將該文件中的所有名稱/值對連同URL一起發送給Amazon的服務器。如果未找到任何Cookie文件,則不會發送任何Cookie數據。
- Amazon的Web服務器將接收Cookie數據和頁面請求。如果接收到名稱/值對,Amazon就可以使用它們。
- 如果未接收到任何名稱/值對,Amazon將知道您之前從未訪問過該網站。服務器將在Amazon的數據庫中為您創建一個新ID,然后將名稱/值對放置在它發送的網頁的標頭中,從而發送到您的計算機上。計算機將名稱/值對存儲在硬盤上。
- 每當您訪問網站并請求頁面時,Web服務器可以更改名稱/值對或添加新對。
服務器還可以將其他一些信息連同名稱/值對一起發送,這些信息中包括到期日期。另一個信息是路徑(以便網站可以將不同的Cookie值與網站的不同部分相關聯)。
您可以控制整個過程。在瀏覽器中設置一個選項,以便每當網站向您發送名稱/值對時,瀏覽器都會通知您。之后,您便可以接受或拒絕這些值。
網站是如何使用Cookie的?
Cookie由于為使用網站的人解決了一個大問題而逐漸發展起來。從廣義上說,Cookie允許網站在計算機上存儲狀態信息,這些信息可讓網站記住瀏覽器所處的狀態。ID是一條簡單的狀態信息——如果計算機上存在某個ID,則相應網站就會知道您之前已訪問過該網站。這個狀態表明“您的瀏覽器至少已訪問該網站一次”,并且該網站可以通過那次訪問記住您的ID。
網站可以按照許多不同的方式使用Cookie。以下是一些最常見的示例:
- 網站可以準確確定網站的實際訪問人數。研究表明,由于存在代理服務器、緩存、集中器等,網站用來準確計算訪問者數量的唯一方法就是為每個訪問者設置一個包含唯一ID的Cookie。通過使用Cookie,網站可以確定:
- 訪問者人數
- 新訪問者和重復訪問者的人數對比
- 訪問者的訪問頻率
網站通過使用數據庫來完成此任務。當訪問者第一次訪問網站時,網站會在數據庫中創建一個新ID,并將此ID作為Cookie發送。當用戶下一次返回網站時,網站會在數據庫中將與此ID相關的計數器遞增,從而知道訪問者的返回次數。
- 網站可以存儲用戶首選項,以便使此網站的外觀對于每一個訪問者都可以是不同的(通常稱作自定義)。例如,如果您訪問msn.com,該網站會為您提供“更改內容/布局/顏色”的功能,還允許輸入您所在地區的郵政編碼來獲取自定義的天氣信息。當您輸入郵政編碼時,下面的名稱/值對就會添加到MSN的Cookie文件中:
WEAT CC=NC%5FRaleigh%2DDurhamandREGION= www.msn.com/
由于筆者居住在北卡羅來納州羅利市,這樣的天氣預報才有意義。
大多數網站似乎都會將類似這樣的首選項存儲在網站的數據庫中,并僅將ID存儲為Cookie。不過,將實際值存儲在名稱/值對中是另一種實現方式(稍后我們將討論此方法不受歡迎的原因)。
- 電子商務網站可以實現購物車和“快速結帳”選項這樣的功能。Cookie包含一個ID并可讓網站跟蹤您向購物車中添加的不同商品。您添加到購物車中的每個商品會與您的ID值一起存儲在網站的數據庫中。當您結帳時,網站通過從數據庫檢索您的所有選擇,就可以知道購物車中的商品。在不使用Cookie或類似對象的情況下,人們很難實現方便的購物機制。
在所有這些示例中,請注意,數據庫可以存儲您從網站選擇的商品、您從網站查看的頁面以及您通過在線表單提供給網站的信息等,所有信息都存儲在網站的數據庫中。在大多數情況下,存儲在計算機上的全部內容只是一個包含您的獨特ID的Cookie。
Cookie存在的問題
Cookie使許多原本不可能的事情變為了可能,但它還不是一種完善的狀態機制。例如,Cookie在以下一些方面還不夠完善。
- 人們經常共享計算機——在公共場所使用的任何計算機以及在辦公環境或家中使用的許多計算機都可以由多個人共享。假設您使用公共計算機(例如在圖書館中)從網上商店買東西,商店會在計算機上留下一個Cookie,這樣便導致其他人稍后可能會試圖使用您的帳戶從商店買東西。商店之所以通常會發布有關此問題的大量警告,原因就在于此。然而即使如此,還是會有錯誤發生。例如,筆者曾經使用筆者妻子的計算機從亞馬遜網站(Amazon) 買東西,后來,當她訪問亞馬遜網站并單擊“一鍵通”按鈕時,并沒有意識到只是這么單擊一下就實際上購買了一本書。
在恰當地使用了帳戶的Windows NT計算機或UNIX計算機的系統上,則不會出現這類問題。帳戶可以將所有用戶的Cookie分開。然而帳戶在其他操作系統上太過隨意,這是個問題。
如果您在公共計算機上嘗試按照上面的例子做,并且使用該計算機的其他人已訪問過博聞網,則歷史記錄URL可能會顯示一個長長的文件列表。
- 清除Cookie——如果您的瀏覽器出了問題并致電技術支持人員,技術支持人員可能會首先要求您清除計算機上所有的臨時網絡文件。執行此操作后,您會丟失所有的Cookie文件。這時當您再次訪問某個網站,該網站會認為您是一個新用戶,并會為您分配一個新的Cookie。這往往會在識別新訪問者還是回訪者方面造成網站記錄錯誤,同時也會讓您難以恢復以前存儲的首選項。這就是網站在某些情況下要求您注冊的原因——如果您使用用戶名和密碼進行注冊,則可以登錄并恢復首選項,即使您丟失Cookie文件也沒有關系。如果將首選項的值直接存儲在計算機上(如上述MSN天氣示例),則無法進行恢復。這就是現在許多網站將所有用戶信息存儲在一個中央數據庫中,而僅將一個ID值存儲在用戶的計算機上的原因。
如果您清除對應于博聞網的Cookie文件,然后重新訪問上一節中的歷史記錄URL,則會發現博聞網沒有您的歷史記錄。網站必須為您創建一個新的ID和Cookie文件,新的ID沒有任何相關數據存儲在數據庫中。
- 多臺計算機——多臺計算機——人們經常會在一天內使用多臺計算機。例如,筆者在辦公室和家中各有一臺計算機,還有一臺在旅途中使用的便攜式計算機。除非網站經過了特別設計來解決這一問題,否則筆者這三臺計算機上會有三個不同的Cookie文件。通過這三臺計算機訪問的任何網站都會將筆者視為三個不同的用戶進行跟蹤,設置三次首選項會有些煩人。不過,允許注冊并集中存儲首選項的網站可使筆者在三臺計算機上輕松擁有同一帳戶,但是網站開發人員必須在設計網站時做好相應的規劃。
如果您從一臺計算機上訪問上一節中演示的歷史記錄URL,然后從另一臺計算機上再次嘗試相同的操作,則會發現您的歷史記錄列表是不同的。這是因為服務器為您創建了兩個ID,一個ID對應于一臺計算機。
總的來講,除了要求用戶進行注冊并在中央數據庫中存儲所有信息之外,可能沒有任何其他簡單的解決方案來解決這些問題。
當您使用博聞網注冊系統進行注冊時,可以通過以下方式解決此問題:網站會記住您的Cookie值,并將其與您的注冊信息存儲在一起。如果您有機會從任何其他計算機(或已丟失Cookie文件的計算機)登錄,則服務器將修改該計算機上的Cookie文件以包含與您的注冊信息相關的ID。這樣,多臺計算機上就可以使用的相同ID值了。
關于Cookie的爭議
讀到這里時,您可能很想知道為什么媒體一直以來會對Cookie和網絡隱私存在這些爭議。從上文中,您已了解到Cookie都是善意的文本文件,并且知道它們提供了大量有用的Web功能。
然而有兩個方面的問題引起了有關Cookie的強烈爭議:
- 第一個方面的問題已困擾消費者長達數十年。假設您通過傳統的郵購目錄購買東西,目錄公司可以從訂單中獲取您的姓名、地址和電話號碼,并且也知道您購買的商品。該公司可以將您的信息出售給可能希望向您銷售類似產品的其他公司,這就是促成電話營銷和垃圾郵件的來源。
在一個網站上,網站不但可以跟蹤您購買的商品,還可以跟蹤您閱讀的網頁和單擊的廣告等。如果您稍后購買物品并輸入您的姓名和地址,則網站可能會比傳統的郵購公司知道更多有關您的信息。這樣可以更加精確地尋找目標,但會給很多人帶來不便。
不同的網站具有不同的策略。博聞網具有嚴格的隱私策略,并且不會向任何第三方出售或與之共享有關我們的讀者的任何個人信息,除非您特地告訴我們這樣做(例如,決定參加一個電子郵件計劃中)。我們會聚合信息并進行發布,例如,如果記者詢問博聞網有多少訪問者或網站上的哪一個頁面最受歡迎,我們會根據數據庫中的數據來創建這些聚合統計信息。
- 第二個方面的問題是互聯網特有的。有一些基礎設施提供商實際上可以創建在多個網站上可見的Cookie,DoubleClick就是這方面最出名的例子。許多公司使用DoubleClick在其網站上提供廣告橫幅服務。DoubleClick會在網站上放置一些小型(1x1像素GIF文件,以方便DoubleClick在您的計算機上加載Cookie,這樣它就可以跨多個網站跟蹤您的活動。它可能會查看到您在搜索引擎中鍵入的搜索字符串(這更多的是緣于一些搜索引擎實現其系統的方式,而不是因為要有意進行任何惡意操作)。由于它可以從多個網站收集有關您的如此多的信息,因此DoubleClick可以制作內容非常豐富的配置文件,當然這些配置文件仍是匿名的
隨后,DoubleClick又向前邁進了一步。通過收購一家公司,DoubleClick揚言將這些內容豐富的匿名配置文件與姓名和地址信息重新鏈接在一起,標明這些信息的所有者并進行出售。如此一來,這種做法開始讓人覺得非常像是在窺探用戶的隱私,這也正是引起爭議的原因。
DoubleClick以及諸如此類的公司在做此類事情時處于一個獨特的位置——因為它們為如此多的網站提供廣告服務。由于Cookie因網站而異,所以跨網站配置的功能并不適用于單個網站。
評論
查看更多