PHP的Cookie技術介紹

本文概要的講解了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服務器保存在用戶浏覽器上的小文本文件,它可以包含有關用戶的信息(如身份

識別號碼、密碼、用戶在Web站點購物的方式或用戶訪問該站點的次數)。無論何時用戶鏈接到服務器,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是由Web服務器保存在用戶浏覽器上的小文本文件,它包含有關用戶的信息(如身份

識別號碼、密碼、用戶在Web站點上購物的方式或用戶訪問該站點的次數)。 那麽Cookie 技術究竟怎樣呢?是否真的給網絡用戶帶來了個人隱私的危害呢?看了上面的資料您心中應該有個度量了吧。

 
動態網頁技術PHP關于cookie和session的分析
1. PHP的COOKIEcookie 是一種在遠程浏覽器端儲存數據並以此來跟蹤和識別用戶的機制。PHP在http協議的頭信息裏發送cookie, 因此 setcookie() 函數必須在其它信息被輸出到浏覽器前調用,這和對 header() 函數的限制類似...查看完整版>>動態網頁技術PHP關于cookie和session的分析
 
PHP設置COOKIE保留時間爲浏覽器進程
例如:以下爲引用的內容:<?php$USERID="PHPer";$CookieTime=0;setcookie("USERID", "$USERID", time()+$CookieTime,"/","pcpchina.com");?> 你會發現這個語句執行過後,Cookie裏什麽也沒有,到下一個頁面就顯...查看完整版>>PHP設置COOKIE保留時間爲浏覽器進程
 
用php實現結合cookie玩轉查詢
  if(isset($_GET)){     //頁面參數存在...提取   $page  =$_GET;   $key  =$_COOKIE;   $sort  =$_COOKIE;}else{              //頁面參數不存在...設定   $page  =1;   $s...查看完整版>>用php實現結合cookie玩轉查詢
 
php實現跨域名Cookie
     Cookie 真是一個偉大的發明,它允許 web 開發者保留他們的用戶的登錄狀態。然而,當你的站點或網絡有一個以上的域名時就會出現問題了。  在 Cookie 規範上說,一個 cookie 只能用于一個域名,不能夠發給其...查看完整版>>php實現跨域名Cookie
 
PHP實現跨域名Cookie
  Cookie真是一個偉大的發明,它允許web開發者保留他們的用戶的登錄狀態。然而,當你的站點或網絡 有一個以上的域名時就會出現問題了。   在Cookie規範上說,一個cookie只能用于一個域名,不能夠發給其它的域名...查看完整版>>PHP實現跨域名Cookie