本文概要的說明了Cookie的起源與根本屬性,為學些PHP設定Cookie提供技術背景,推薦PHP新手一看。
在學習PHP如何設定Cookie之前我們先來了解下Cookie技術。
(1)Cookie技術簡介
在WEB技術發展史上,Cookie技術的出現是一個重大的變革。最早是Netscape在它的Netscape Navigator瀏覽器中引進了Cookie技術,從那時起,World Wide Web 協會就開始支援Cookie標準。以後又經過微軟的大力推廣(因為微軟的IIS Web伺服器所採用的ASP技術很大程度的使用了Cookie技術),也就是在微軟的Internet Explorer瀏覽器中完全支援Cookie技術。到現在,絕大多數的瀏覽器都支援Cookie技術,或至少相容於Cookie
技術的使用。
1)什麼是Cookie?
依照Netscape官方文件中的定義,Cookie是在HTTP協定下,伺服器或腳本可以維護客戶工作站上資訊的一種方式。 Cookie 是網路伺服器儲存在使用者瀏覽器上的小文字文件,它可以包含有關使用者的資訊(如身分識別號碼、密碼、使用者在網路網站購物的方式或使用者造訪網站的次數)。無論何時使用者連結到伺服器,Web網站都可以存取Cookie資訊。
通俗地講,瀏覽器用一個或多個限定的檔案來支援Cookie。這些檔案在使用Windows作業系統的機器上叫做Cookie 文件,在Macintosh機器上叫做magic Cookie 文件,這些檔案被網站用來在上面儲存Cookie資料。
網站可以在這些Cookie 檔案中插入訊息,這樣對有些網路使用者就有些副作用。有些使用者認為這造成了對個人隱私的侵犯,更糟的是,有些人認為Cookie是對個人空間的侵占,而且會對使用者的電腦帶來安全性的危害。
目前有些Cookie 是臨時的,有些則是持續的。臨時的Cookie只在瀏覽器上保存一段規定的時間,一旦超過規定的時間該Cookie就會被系統清除。例如在PHP中Cookie被用來追蹤使用者程序直到使用者離開網站。持續的Cookie則保存在使用者的Cookie檔案中,下次使用者返回時,仍可對它進行呼叫。
在Cookie檔案中儲存Cookie,有些使用者會過度認為這將帶來很大的問題。主要是有些使用者擔心Cookie會追蹤使用者上網的習慣,譬如使用者喜愛到那些類型的網站、愛從事些什麼活動等。害怕這種個人資訊一旦落入一些別有用心的傢伙手中,那麼個人也可能成為一大堆廣告垃圾的對象,甚至遭到意外的損害。不過,這種擔心壓根兒不會發生,因為網站以外的使用者是無法跨越網站來取得Cookie資訊的。所以想以此目的來應用Cookie是不可能的。不過,由於一些用戶錯誤的理解以及“以訥傳訥”,一些瀏覽器開發人員別無選擇,只好作出相識的回應(例如Netscape Navigator4.0和Internet Explorer3.0都提供了屏蔽Cookie 的選項)。
對Cookie技術期待了這麼久的結果是,迫使許多瀏覽器開發人員在它們的瀏覽器中提供了對Cookie的彈性控制功能。例如,目前的兩大主流瀏覽器Netscape Navigator 和Internet Explorer是這樣處理Cookie
的:Netscape Navigator4.0不但可以接受Cookie進行警告,而且還可以屏蔽掉Cookie;InternetExplorer3.0也可以屏蔽Cookie,但在Internet Explorer4.0中就只能進行接受警告而沒有提供屏蔽選項,不過在Internet
Explorer4.0之後的更新版本中又加入了屏蔽Cookie的功能選項。
此外,許多最新的技術甚至已經可以在無法封鎖Cookie的瀏覽器上進行Cookie的屏蔽了。例如,可以透過將Cookie檔案設定成不同的類型來限制Cookie的使用。但是,非常不幸地是,如果你想完全封鎖Cookie的話,肯定會因此拒絕許多的網站頁面。因為現今已經有許多Web網站開發人員愛上了Cookie技術的強大功能,例如Session物件的使用就離不開Cookie的支援。
儘管現今仍有一些網路使用者對於Cookie的論點樂此不倦,但是對於絕大多數的網路使用者來說還是傾向接受Cookie的。因此,我們盡可以放心地使用Cookie技術來開發我們的WEB頁面。
2)Cookie是怎樣運作的?
要了解Cookie,必不可少地要知道它的工作原理。一般來說,Cookie會透過HTTP Headers從伺服器端返回瀏覽器。首先,伺服器端在回應中利用Set-Cookie header來建立一個Cookie ,然後,瀏覽器在它的請求中透過Cookie header包含這個已經建立的Cookie,並且反它返回至伺服器,從而完成瀏覽器的論證。
例如,我們建立了一個名字為login的Cookie來包含訪客的信息,當建立Cookie時,伺服器端的Header 如下面所示,這裡假設訪客的註冊名稱是“Michael Jordan”,同時也對所建立的Cookie的屬性如path、
domain、expires等進行了指定。
Set-Cookie:login=Michael Jordan;path=/;domain=msn.com;
expires=Monday,01-Mar-99 00:00:01 GMT
上面這個Header會自動在瀏覽器端電腦的Cookie檔中加入一筆記錄。瀏覽器將變數名為「login」的Cookie賦值為「Michael Jordon」。注意,在實際傳遞過程中這個Cookie的值是經過了URLEncode方法的
URL編碼操作的。 這個含有Cookie值的HTTP Header被儲存到瀏覽器的Cookie檔案後,Header就會通知瀏覽器將Cookie透過要求以忽略路徑的方式傳回伺服器,完成瀏覽器的認證操作。
此外,我們使用了Cookie的一些屬性來限定該Cookie的使用。例如Domain屬性能夠在瀏覽器端對Cookie發送進行限定,具體到上面的例子,該Cookie只能傳達室到指定的伺服器上,而絕不會跑到其他的如www.phpq.net的Web站點上去。 Expires屬性則指定了該Cookie保存的時間期限,例如上面的Cookie在瀏覽器上只儲存到1999年3月1日1秒。當然,如果瀏覽器上Cookie 太多,超過了系統所允許的範圍,瀏覽器將自動對它進行刪除。至於屬性Path,用來指定Cookie將會被傳送到伺服器的哪一個目錄路徑下。
說明:瀏覽器創建了一個Cookie後,對於每一個針對該網站的請求,都會在Header中帶著這個Cookie;不過,對於其他網站的請求Cookie是絕對不會跟著發送的。而且瀏覽器會這樣一直發送,直到Cookie過期為止。 Cookie技術是一個非常有爭議的技術,自經誕生它就成了廣大網路使用者和Web開發人員的一個爭論焦點。有一些網路用戶,甚至包括一些資深的Web專家也對它的產生和推廣感到不滿,這倒不是因為Cookie技術的功能太弱或別的技術性能上的原因,而僅僅是因為他們覺得Cookie 的使用,對網路使用者的隱私構成了危害。因為Cookie是由網路伺服器儲存在使用者瀏覽器上的小文字文件,它包含有關使用者的資訊(如身分識別號碼、密碼、使用者在網路網站上購物的方式或使用者造訪網站的次數)。 那麼Cookie 技術究竟怎麼樣呢?是否真的為網路使用者帶來了個人隱私的危害呢?看了上面的資料您心中應該要有個度量了吧。