国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP中Cookie及其使用

2024-05-04 23:04:57
字體:
來源:轉載
供稿:網友

最大的網站源碼資源下載站,

  cookie技術是一個非常有爭議的技術,自經誕生它就成了廣大網絡用戶和人員的一個爭論焦點。有一些網絡用戶,甚至包括一些資深的web專家也對它的產生和推廣感到不滿,這倒不是因為cookie技術的功能太弱或別的技術性能上的原因,而僅僅是因為他們覺得cookie 的使用,對網絡用戶的隱私構成了危害。因為cookie是由web服務器保存在用戶瀏覽器上的小文本文件,它包含有關用戶的信息(如身份識別號碼、密碼、用戶在web站點上購物的方式或用戶訪問該站點的次數)。

  那么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.hp.com的web站點上去。expires屬性則指定了該cookie保存的時間期限,例如上面的cookie在瀏覽器上只保存到1999年3月1日1秒。當然,如果瀏覽器上cookie 太多,超過了系統所允許的范圍,瀏覽器將自動對它進行刪除。至于屬性path,用來指定cookie將被發送到服務器的哪一個目錄路徑下。

  說明:瀏覽器創建了一個cookie后,對于每一個針對該網站的請求,都會在header中帶著這個cookie;

  不過,對于其他網站的請求cookie是絕對不會跟著發送的。而且瀏覽器會這樣一直發送,直到cookie過期為止。

  上一部分講了有關cookie的技術背景,這部分來說說在php里如何設置、使用、刪除cookie,及cookie的一些限制。php對cookie支持是透明的,用起來非常方便。

  1、設置cookie

  php用setcookie函數來設置cookie。必須注意的一點是:cookie是http協議頭的一部分,用于瀏覽器和服務器之間傳遞信息,所以必須在任何屬于html文件本身的內容輸出之前調用cookie函數。setcookie 函數定義了一個cookie,并且把它附加在http頭的后面,setcookie函數的原型如下:  

  int setcookie(string name, string value, int expire, string path, string domain, int secure);

  除了name之外所有的參數都是可選的。value,path,domain 三個參數可以用空字符串代換,表示沒有設置;expire和 secure兩個參數是數值型的,可以用0表示。expire參數是一個標準的unix時間標記,可以用time()或mktime() 函數取得,以秒為單位。secure參數表示這個cookie是否通過加密的https協議在網絡上傳輸。

  當前設置的cookie 不是立即生效的,而是要等到下一個頁面時才能看到.這是由于在設置的這個頁面里cookie由服務器傳遞給客戶瀏覽器,在下一個頁面瀏覽器才能把cookie從客戶的機器里取出傳回服務器的原因。在同一個頁面設置cookie,實際是從后往前,所以如果要在插入一個新的cookie之前刪掉一個,你必須先寫插入的語句,再寫刪除的語句,否則可能會出現不希望的結果。  來看幾個例子:

  簡單的: 

  setcookie("mycookie", "value of mycookie");

  帶失效時間的:   

  setcookie("withexpire", "expire in 1 hour", time()+3600);//3600秒=1小時

  什么都有的: 

  setcookie("fullcookie", "full cookie value", time()+3600, "/forum", ".phpuser.com", 1);

  這里還有一點要說明的,比如你的站點有幾個不同的目錄,那么如果只用不帶路徑的cookie的話,在一個目錄下的頁面里設的cookie在另一個目錄的頁面里是看不到的,也就是說,cookie是面向路徑的。實際上,即使沒有指定路徑,web 服務器會自動傳遞當前的路徑給瀏覽器的,指定路徑會強制服務器使用設置的路徑。

  解決這個問題的辦法是在調用setcookie時加上路徑和域名,域名的格式可以是“www.phpuser.com”,也可是“.phpuser.com”。

  setcookie函數里表示value的部分,在傳遞時會自動被encode,也就是說,如果value的值是“test value”在傳遞時就變成了“test%20value”,跟url的方法一樣。當然,對于程序來說這是透明的,因為在php接收cookie的值時會自動將其decode。

  如果要設置同名的多個cookie,要用數組,方法是:  

  setcookie("cookiearray[]", "value 1");

  setcookie("cookiearray[]", "value 2");

  或  

  setcookie("cookiearray[0]", "value 1");

  setcookie("cookiearray[1]", "value 2");

  2、接收和處理cookie

  php對cookie的接收和處理的支持非常好,是完全自動的,跟form變量的原則一樣,特別簡單。比如設置一個名為mycookier的cookie,php會自動從web服務器接收的http頭里把它分析出來,并形成一個與普通變量一樣的變量,名為$mycookie,這個變量的值就是cookie的值。數組同樣適用。另外一個辦法是引用php的全局變量$http_cookie_vars數組。

  分別舉例如下:(假設這些都在以前的頁面里設置過了,并且仍然有效)  

  echo $mycookie;

  echo $cookiearray[0];

  echo count($cookiearray);

  echo $http_cookie_vars["mycookie"];

  就這么簡單。

  3、刪除cookie

  要刪除一個已經存在的cookie,有兩個辦法:

  一是調用只帶有name參數的setcookie,那么名為這個name的cookie 將被從關系戶機上刪掉;另一個辦法是設置cookie的失效時間為time()或time()-1,那么這個cookie在這個頁面的瀏覽完之后就被刪除了(其實是失效了)。

  要注意的是,當一個cookie被刪除時,它的值在當前頁在仍然有效的。

  4、使用cookie的限制

  首先是必須在html文件的內容輸出之前設置;

  其次不同的瀏覽器對cookie的處理不一致,且有時會出現錯誤的結果。比如:ms ie+service pack 1不能正確處理帶域名和路徑的cookie ,netscape communicator 4.05和ms ie 3.0不能正確處理不帶路徑和時間的cookie。至于ms ie 5 好象不能處理帶域名、路徑和時間的cookie。這是我在設計本站的頁面時發現的。

  第三個限制是在客戶端的。一個瀏覽器能創建的cookie數量最多為30個,并且每個不能超過4kb,每個web站點能設置的cookie總數不能超過20個。

  關于cookie的話題,就說到這兒了。

  (由于cookie最初由netscape定義的,所以附上netscape公司關于cookie的官方原始定義的網址:

  _spec.html" target=_blank>http://www.netscape.com/newsref/std/cookie_spec.html
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金山区| 水富县| 祥云县| 吴江市| 房山区| 社旗县| 光泽县| 温泉县| 宝清县| 资中县| 滦南县| 柘荣县| 淮北市| 汕尾市| 海丰县| 珲春市| 伊川县| 宜城市| 朝阳县| 石阡县| 醴陵市| 旺苍县| 桦甸市| 大悟县| 贡嘎县| 汝南县| 张家界市| 扶风县| 色达县| 鹿泉市| 绥化市| 壤塘县| 图木舒克市| 游戏| 南阳市| 嵊泗县| 弥勒县| 澎湖县| 台中县| 永昌县| 景宁|