Cookie基礎篇

 

 

因特網的Cookie技術極其簡單,卻有著旺盛的生命力。Cookie開始引起眾人的注意是從2000年二月份隨著網絡隱私權的提出開始的,有關的辯論至今仍在繼續。從另一方面來說,Cookie使得瀏覽網頁更容易了。幾乎所有的主要的網站設計者都使用了Cookie,因為他們想為瀏覽網站的人提供一個更好的瀏覽環境,同時也能更加準確地收集訪客的信息。

 

 

  有家頗有影響的報紙上曾刊登了一篇很有深度的關于網絡隱私的文章,上面對于Cookie的定義是這樣的:

 

 

  “CookieWeb網站放在您的硬盤上的程序。它守在您的電腦里,搜集您的信息以及您在因特網上所做的任何事情,當Web站點需要的時候它能夠下載所有這些搜集到的信息。

 

 

  像這樣的定義在報刊中相當普遍。問題是,它的定義犯了很大的錯誤。Cookie不是程序,而且它不能像程序一樣地運行,所以它無法為自己搜集任何信息。它也不能從您的電腦上取得您的任何個人資料。

 

 

  Cookie的比較確切的定義應該是這個樣子:

 

 

  “CookieWeb服務器保存在用戶硬盤上的一段文本。Cookie允許一個Web站點在用戶的電腦上保存信息并且隨后再取回它。信息的片斷以/(name-value pairs)的形式儲存。

 

 

  舉例來說,一個Web站點可能會為每一個訪問者產生一個唯一的ID,然后以Cookie文件的形式保存在每個用戶的機器上。

 

 

  如果您使用IE瀏覽器訪問Web,您會看到所有保存在您的硬盤上的Cookie。它們最常存放的地方是:C:\Documents and Settings\Administrator\Cookies。在我的機器上共有165個文件。每一個文件都是一個由/對組成的文本文件,另外還有一個文件保存有所有對應的Web站點的信息。

 

 

  在這個文件夾里的每個Cookie文件都是一個簡單而又普通的文本文件。透過文件名,您可以看到是哪個Web站點在您的機器上放置了Cookie(當然站點信息在文件里也有保存)。您也能雙擊打開每一個Cookie文件。

 

 

比如,我訪問了goto.com,而且這個站點在我的電腦上放了個Cookiegoto.comCookie文件包含了這樣的內容:

 

 

  UserID A9A3BECE0563982D www.goto.com/

 

 

  goto.com在我的電腦上存入了一個單一的/對。/對的UserIDA9A3BECE0563982D。在我第一次訪問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 ubid-main,一個標記每次任務的ID session-id及任務發生的時間session-id-time。還有一個x-main,不知道是什么。

 

 

  大多數的網站在您的電腦上只保存一條信息,即用戶ID。但一個站點可以用Cookie存儲的/對的最大數目沒有任何限制。

 

 

  一個/對僅僅是一條命名的數據,它不是程序,也不能任何事情。一個網站只能取得它放在您的電腦中的信息,它無法從其它的Cookie文件中取得信息,也無法得到您的電腦上的其它任何東西。

 

 

Cookie數據僅僅是Web站點在瀏覽者硬盤上存儲的/數據對。這就是Cookie的所有內容。Web站點保存了數據,隨后又把它取回。一個Web站點只能取得它保存在你電腦上的內容,無法偷窺別的Cookie,更不要說電腦上其他的數據。
  
  Cookie數據的流動過程如下:
  
  ·如果在瀏覽器上鍵入了一個Web站點的URL,瀏覽器向Web站點請求讀取網頁。比如,您輸入了:http://www.amazon.com
  
  瀏覽器將從Amazon的服務器讀取它的主頁。
  
  ·在做上面工作的同時,瀏覽器將從電腦上尋找Amazon網站設置的Cookie文件。如果找到了AmazonCookie文件,瀏覽器會把文件中的所有/對同先前的URL一同發給Amazon服務器。如果沒有找到,就不發送Cookie數據。
  
  ·Amazon服務器接收Cookie數據和對網頁的請求。如果存在/對,Amazon將使用它。
  
  ·如果沒有收到/對,Amazon知道您在此之前沒有訪問過它的站點,服務器會為您創建一個新的ID放進Amazon的數據庫中,然后把/對放在傳回的網頁的頭信息里傳給您。您的瀏覽器將在硬盤上保存/對。
  
  ·每當您再次訪問網站時,網站服務器會改變/對或增加新的/對。
  
  另外,服務器會隨著/對發送一些其他信息。其一是生存期(Expiration date);還有一個是路徑(網站借此把不同的Cookie值與不同的網站部位關聯起來)。
  
  您有權控制這個過程。您可以設置一個選項讓瀏覽器在收到網站發來的/對時提醒您,由您決定是否接受。

 

 

 

 

Cookie實踐篇

 

 

 Cookie解決了網站建設人員的一個大難題,它允許一個網站在您的機器上保存網站相關信息,從而網站可以記住瀏覽器上一次所處的狀態。用戶ID是一種簡單的狀態信息——如果您的電腦上有ID存在,網站會知道您此前訪問過它。

 

 

  Web網站利用Cookie的方式各不相同。下面是幾個最為常見的例子:

 

 

  1.網站能夠精確地知道有多少人瀏覽過。

 

 

  由于代理服務器、緩存等的使用,唯一能幫助網站精確統計來訪人數的方法就是為每個訪問者建立一個唯一的ID。使用Cookie,網站可以完成以下工作:

 

 

  測定多少人訪問過;

 

 

  測定訪問者有多少是新用戶(即第一次來訪),多少是老用戶;

 

 

  測定一個用戶多久訪問一次網站。

 

 

  網站使用數據庫達到上述目標。當一個用戶第一次訪問時,網站在數據庫中建立一個新的ID,并把ID通過Cookie傳送給用戶。用戶再次來訪時,網站把該用戶ID對應的計數器加1,得到用戶的來訪次數。

 

 

  2.網站保存用戶的設置,按照用戶的喜好定制網頁外觀。

 

 

  例如,假如你訪問 msn.com,它為你提供了改變網頁內容、布局和顏色的能力,允許你輸入自己的郵政編碼,為你提供特定的天氣預報。輸入郵政編碼后,MSNCookie文件中將加入這樣的/對:

 

 

  WEAT CC=NC%5FRaleigh%2DDurham?ION= www.msn.com/

 

 

 ?。ū纠校]編是Raleigh, NC

 

 

 大多數網站只在Cookie里保存用戶ID,而在網站數據庫中存儲用戶設置參數。當然在/對里保存這些參數也是一種辦法(稍后我們將討論后一種方法有什么不妥)。

 

 

  3.電子商務站點能夠實現一些像購物籃快速結賬之類的東西。

 

 

  Cookie里面包含了一個ID,當你往購物籃中放了新東西時網站即能記錄下來。你放進購物籃里的每一件東西保存在網站的數據庫里的對應著你的ID的記錄。當你買單時,網站通過檢索數據庫中你的所有選擇就能知道你的購物籃里有些什么。假如沒有Cookie或類似的機制,上面的工作將很難完成。

 

 

  在所有的示例中,網站的數據庫能夠保存的有你所選擇的內容、你瀏覽過的網頁、你在表單里填寫的信息等。所有這些信息保存在站點的數據庫中。多數情況下,包含有你的唯一IDCookie保存在你的電腦里。

 

 

  下面的實例用來演示Cookie和數據庫的組合能夠做些什么。我們來借助howcookieworks.com網站(一個假設網站)的服務器來講述工作過程:

 

 


  在你第一次訪問 http://www.howcookieworks.com 時,服務器為你創建了一個唯一ID并在你的電腦上保存了一個包含有該IDCookie文件。舉例來說,在我現在使用的電腦上,我所看到的cookie文件的內容是:

 

 

  user 35005 www.howcookieworks.com/

 

 

  數字35005并沒有什么稀奇——它僅僅是一個整數,它每次隨著訪客的到來而增加。我是自網站建立以來的第35005個用戶。用戶的ID可以被設計得很精細,許多網站使用超過20位數字的ID。

 

 

  現在,無論何時訪問這個網站上的任何網頁,瀏覽器會把包含有你的IDCookie發回服務器。然后服務器在數據庫中保存一條記錄,包括你的ID、網頁的URL以及下載網頁的時間。

 

 

了解cookiecookie的安全性

 

 

一、什么是cookie?

 

 

  打開你的Documents and Settings文件夾,進去以后,隨便打開一個用戶來看看,是不是有一個文件夾叫“Cookies”,里面裝著一堆.txt文件?那么,這個Cookies到底是個什么東東呢?

 

 

  Cookie的英文原意是甜餅,但這里所講的“Cookie”可不是糕點哦,它只是一個保存在客戶機中的簡單的文本文件,這個文件與特定的Web文檔關聯在一起,保存了該客戶機訪問這個Web文檔時的信息,當客戶機再次訪問這個Web文檔時這些信息可供該文檔使用。由于“Cookie”具有可以保存在客戶機上的神奇特性,因此它可以幫助我們實現記錄用戶個人信息的功能,而這一切都不必使用復雜的CGI等程序。是不是很有意思?

 

 

  二、Cookie的功能

 

 

  1.定制個性化空間

 

 

  用戶訪問一個站點,可能由于費用、帶寬限制等原因,并不希望瀏覽網頁所有的內容。Cookie可根據個人喜好進行欄目設定,即時、動態地產生用戶所要的內容,這就迎合了不同層次用戶的訪問興趣,減少用戶項目選擇的次數,更合理利用網頁服務器的傳輸帶寬。

 

 

  2.記錄站點軌跡

 

 

  由于Cookie可以保存在用戶機上,并在用戶再次訪問該Server時讀回這一特性可以幫助我們實現很多設計功能,如顯示用戶訪問該網頁的次數;顯示用戶上一次的訪問時間;甚至是記錄用戶以前在本頁中所做的選擇等等,這可免去我們再去研究復雜的CGI編程。

 

 

  三、Cookie的組成

 

 

  類似Javascript變量,Cookie由變量名和值組成。其屬性里既有標準的Cookie變量,也有用戶自己創建的變量,屬性中變量是用變量=形式來保存。

 

 

  根據Netscape公司的規定,Cookie格式如下:

 

 

  SetCookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAMESECURE

 

 

  NAME=VALUE

 

 

  這是每一個Cookie均必須有的部分。NAME是該Cookie的名稱,VALUE是該Cookie的值。在字符串“NAME=VALUE”中,不含分號、逗號和空格等字符。

 

 

Expires=DATEExpires變量是一個只寫變量,它確定了Cookie有效終止日期。該屬性值DATE必須以特定的格式來書寫:星期幾,DDMMYY HH:MM:SS GMTGMT表示這是格林尼治時間。反之,不以這樣的格式來書寫,系統將無法識別。該變量可省,如果缺省時,則Cookie的屬性值不會保存在用戶的硬盤中,而僅僅保存在內存當中,Cookie文件將隨著瀏覽器的關閉而自動消失。

 

 

  Domain=DOMAINNAME:Domain該變量是一個只寫變量,它確定了哪些Internet域中的Web服務器可讀取瀏覽器所存取的Cookie,即只有來自這個域的頁面才可以使用Cookie中的信息。這項設置是可選的,如果缺省時,設置Cookie的屬性值為該Web服務器的域名。

 

 

  Path=PATHPath屬性定義了Web服務器上哪些路徑下的頁面可獲取服務器設置的Cookie。一般如果用戶輸入的URL中的路徑部分從第一個字符開始包含Path屬性所定義的字符串,瀏覽器就認為通過檢查。如果Path屬性的值為“/”,則Web服務器上所有的WWW資源均可讀取該Cookie。同樣該項設置是可選的,如果缺省時,則Path的屬性值為Web服務器傳給瀏覽器的資源的路徑名。

 

 

  可以看出我們借助對DomainPath兩個變量的設置,即可有效地控制Cookie文件被訪問的范圍。

 

 

  Secure:在Cookie中標記該變量,表明只有當瀏覽器和Web Server之間的通信協議為加密認證協議時,瀏覽器才向服務器提交相應的Cookie。當前這種協議只有一種,即為HTTPS

 

 

  

 

 

  四、cookie的安全性

 

 

  上面我們說到的全都是cookie對我們的好處,但是實際上好象偷偷的被人放了東西在自己的硬盤里(而且還有很多人是在并不知道的情況下)畢竟感覺不是很舒服,尤其是這個文件還可以被遠程的服務器長期的監控,修改,記錄一些你沖浪的習慣甚至你的相關密碼.....這個這個,雖然有一定的便利可圖,但是始終感覺不對味....當然,如果遇到一個很正規的大網站當然不用怕,但是要知道世界上還是有很多黑客網站的哦!所以呢——你自己看著辦拉,我只是提供這些信息而已,呵呵。

 

 

  最后就是如果你覺得還是對cookie這種東東加以限制的好呢,下面有幾種方法,你可以參考參考哦!
如果你用的瀏覽器是IE4:就右件點擊Internet Exploer—>屬性—>安全—>自定義級別—>選中禁止所有Cookie使用這個復選項就可以了;
如果你用的是IE5,哪就比較麻煩了,因為IE5還有本地、可信站點、受限站點等等級別之分,沒辦法,你就一個個的設吧。
上面的辦法都比較麻煩,有沒有什么簡單點的辦法呢?呵呵,其實你只要把剛剛咱們說的cookies文件夾設為只讀不就完了嗎?
不過最后還有些cookie不是放在你能看到的地方,而是放在注冊表中的(一說到注冊表我頭就大了),哪就運行regedit,打開
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/ CurrentVersion/ InternetSettings / Cache/Special Paths/Cookies
刪除其中所有的文件,OK拉,最后再用查找功能一個個的把“Cookies”找出來,一一刪除就行拉!