cookie

Cookie概念:javascript

    Cookie是一種客戶端的狀態管理技術,當瀏覽器向服務器發送請求的時候,服務器會將少許的數據以set-cookie消息頭的方式發送給瀏覽器,當瀏覽器再次訪問服務器時,會將這些數據以cookie消息頭的方式發送給服務器。Cookie是由服務器端生成,發送給User-Agent(通常是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給服務器(前提是瀏覽器設置爲啓用cookie)。Cookie名稱和值能夠由服務器端開發本身定義,對於JSP而言也能夠直接寫入jsessionid,這樣服務器能夠知道該用戶是否合法用戶以及是否須要從新登陸等。html

    Cookie是當你瀏覽某網站時,網站存儲在你機器上的一個小文本文件,它記錄了你的用戶ID,密碼、瀏覽過的網頁、停留的時間等信息,當你再次來到該網站時,網站經過讀取Cookie,得知你的相關信息,就能夠作出相應的動做,如在頁面顯示歡迎你的標語,或者讓你不用輸入ID、密碼就直接登陸等。你能夠在IE的「工具/Internet選項」的「常規」選項卡中,選擇「設置/查看文件」,查看全部保存到你電腦裏的Cookie。這些文件一般是以user@domain格式命名的,user是你的本地用戶名,domain是所訪問的網站的域名。若是你使用NetsCape瀏覽器,則存放在「C:\PROGRAMFILES\NETSCAPE\USERS\」裏面,與IE不一樣的是,NETSCAPE是使用一個Cookie 文件記錄全部網站的Cookies。java

    爲了保證上網安全咱們須要對Cookie進行適當設置。打開「工具/Internet選項」中的「隱私」選項卡(注意該設置只在IE6.0中存在,其餘版本IE能夠在「工具/Internet選項」的「安全」標籤中單擊「自定義級別」按鈕,進行簡單調整),調整Cookie的安全級別。一般狀況,能夠將滑塊調整到「中高」或者「高」的位置。多數的論壇站點須要使用Cookie信息,若是你歷來不去這些地方,能夠將安全級調到「阻止全部Cookies」。若是隻是爲了禁止個別網站的Cookie,能夠單擊「編輯」按鈕,將要屏蔽的網站添加到列表中。在「高級」按鈕選項中,你能夠對第一方Cookie和第三方的Cookie進行設置,第一方Cookie是你正在瀏覽的網站的Cookie,第三方Cookie非正在瀏覽的網站發給你的Cookie,一般要對第三方Cookie選擇「拒絕」,如圖1。你若是須要保存Cookie,可使用IE的「導入導出」功能,打開「文件/導入導出」,按提示操做便可。數據庫

    Cookie中的內容大多數通過了加密處理,所以在咱們看來只是一些毫無心義的字母數字組合,只有服務器的CGI處理程序才知道它們真正的含義。經過一些軟件咱們能夠查看到更多的內容,使用Cookie Pal軟件查看到的Cookie信息,如圖2所示。它爲咱們提供了Server、Expires、Name、value等選項的內容。其中,Server是存儲Cookie的網站,Expires記錄了Cookie的時間和生命期,Name和value字段則是具體的數據。編程

Cookie的用途:數組

    服務器能夠利用Cookies包含信息的任意性來篩選並常常性維護這些信息,以判斷在HTTP傳輸中的狀態。Cookies最典型的應用是斷定註冊用戶是否已經登陸網站,用戶可能會獲得提示,是否在下一次進入此網站時保留用戶信息以便簡化登陸手續,這些都是Cookies的功用。另外一個重要應用場合是「購物車」之類處理。用戶可能會在一段時間內在同一家網站的不一樣頁面中選擇不一樣的商品,這些信息都會寫入Cookies,以便在最後付款時提取信息。瀏覽器

使用和禁用安全

    用戶能夠改變瀏覽器的設置,以使用或者禁用Cookies。服務器

Internet Explorercookie

    工具 > Internet選項 > 隱私頁

    調節滑塊或者點擊「高級」,進行設置.

Mozilla Firefox

    工具> 選項> 隱私

(注: 在Linux版本中,是以下操做:編輯 > 首選項 > 隱私 , 而Mac則是:Firefox > 屬性 > 隱私)

設置Cookies選項

    設定阻止/容許的各個域內Cookie

    查看Cookies管理窗口,檢查現存Cookie信息,選擇刪除或者阻止它們

Safari

    Safari > 預置 > 安全標籤

    選擇如下的選項

    老是 接受 Cookies

    永不 接受 Cookies

    接受 Cookies 僅從您瀏覽的站點 (例如,不接受來自其它站點的廣告) 預設的選項.

    您能夠顯示全部駐留在您瀏覽器中的 cookies,也可隨時將它們之一刪除。

    NETSCAPE「PREFERENCE\ADVANCED\COOKIES」,在出現的窗口中有三個選項,選擇「DISABLECOOKIES」便可關閉COOKIE。在IE中,選擇「查看」/「INTERNET選項」/「高級",在隨後出現的窗口中找到「COOKIES」一項,選擇「禁止全部的COOKIE 使用」可關閉COOKIE。

[4-5]Konqueror

    若是沒有設置cookie列表,請記住在域名前面加入「.」,例如.,不然百度將不會讀取cookie(針對KDE 3.3)。

    Cookies就是服務器暫存放在你的電腦裏的資料(.txt格式的文本文件),好讓服務器用來辨認你的計算機,本文簡單介紹什麼是cookies,cookies有什麼做用,以及網站利用cookie存在什麼問題。

    什麼是Cookies(「小甜餅」)呢?簡單來講,Cookies就是服務器暫存放在你的電腦裏的資料(.txt格式的文本文件),好讓服務器用來辨認你的計算機。當你在瀏覽網站的時候,Web服務器會先送一小小資料放在你的計算機上,Cookies 會幫你在網站上所打的文字或是一些選擇都記錄下來。當下次你再訪問同一個網站,Web服務器會先看看有沒有它上次留下的Cookies資料,有的話,就會依據Cookie裏的內容來判斷使用者,送出特定的網頁內容給你。

    cookies有什麼做用呢?如今上許多網站都用新用戶註冊這一項,有時註冊了一下,等到下次再訪問該站點時,會自動識別到你,而且向你問好,是否是以爲很親切?固然這種做用只是表面現象,更重要的是,網站能夠利用cookies跟蹤統計用戶訪問該網站的習慣,好比什麼時間訪問,訪問了哪些頁面,在每一個網頁的停留時間等。利用這些信息,一方面是能夠爲用戶提供個性化的服務,另外一方面,也能夠做爲了解全部用戶行爲的工具,對於網站經營策略的改進有必定參考價值。例如,你在某家航空公司站點查閱航班時刻表,該網站可能就建立了包含你旅行計劃的Cookies,也可能它只記錄了你在該站點上曾經訪問過的Web頁,在你下次訪問時,網站根據你的狀況對顯示的內容進行調整,將你所感興趣的內容放在前列。這是高級的Cookie應用。目前Cookies 最普遍的是記錄用戶登陸信息,這樣下次訪問時能夠不須要輸入本身的用戶名、密碼了——固然這種方便也存在用戶信息泄密的問題,尤爲在多個用戶共用一臺電腦時很容易出現這樣的問題。

    另外,有人認爲網站利用cookies可能存在侵犯用戶隱私的問題,但因爲大多用戶對此瞭解很少,並且這種對用戶我的信息的利用多數做爲統計數據之用,不必定形成用戶的直接損失,所以如今對於cookies與用戶隱私權的問題並無相關法律約束,不少網站仍然在利用cookie跟蹤用戶行爲,有些程序要求用戶必須開啓cookie才能正常應用。IE瀏覽器用戶能夠經過「隱私」選項中的隱私設置的高低來決定是否容許網站利用cookie跟蹤本身的信息,從所有限制到所有容許,或者限制部分網站,也能夠經過手動方式對具體的網站設置容許或者禁止使用cookies進行編輯。IE瀏覽器的默認設置是 「中級」-對部分網站利用cookie有限制。我的電腦的cookies設置(對IE瀏覽器而言)可經過菜單「工具-Internet選項-隱私」來查看和修改。

生存週期

    Cookie能夠保持登陸信息到用戶下次與服務器的會話,換句話說,下次訪問同一網站時,用戶會發現沒必要輸入用戶名和密碼就已經登陸了(固然,不排除用戶手工刪除Cookie)。而還有一些Cookie在用戶退出會話的時候就被刪除了,這樣能夠有效保護我的隱私。

    Cookie在生成時就會被指定一個Expire值,這就是Cookie的生存週期,在這個週期內Cookie有效,超出週期Cookie就會被清除。有些頁面將Cookie的生存週期設置爲「0」或負值,這樣在關閉頁面時,就立刻清除Cookie,不會記錄用戶信息,更加安全。

識別功能

    若是在一臺計算機中安裝多個瀏覽器,每一個瀏覽器都會在各自獨立的空間存放cookie。由於cookie中不但能夠確認用戶,還能包含計算機和瀏覽器的信息,因此一個用戶用不一樣的瀏覽器登陸或者用不一樣的計算機登陸,都會獲得不一樣的cookie信息,另外一方面,對於在同一臺計算機上使用同一瀏覽器的多用戶羣,cookie不會區分他們的身份,除非他們使用不一樣的用戶名登陸。

反對cookies者

    一些人反對cookie在網絡中的應用,他們的理由以下:

    一、識別不精確
    參見上面的識別功能

    二、隱私,安全和廣告

    Cookies在某種程度上說已經嚴重危及用戶的隱私和安全。其中的一種方法是:一些公司的高層人員爲了某種目的(譬如市場調研)而訪問了從未去過的網站(經過搜索引擎查到的),而這些網站包含了一種叫作網頁臭蟲的圖片,該圖片透明,且只有一個象素大小(以便隱藏),它們的做用是將全部訪問過此頁面的計算機寫入cookie。然後,電子商務網站將讀取這些cookie信息,並尋找寫入這些cookie的網站,隨即發送包含了針對這個網站的相關產品廣告的垃圾郵件給這些高層人員。

    由於更具備針對性,使得這套系統行之有效,收到郵件的客戶或多或少表現出對產品的興趣。這些站點一旦寫入cookie並使其運做,就能夠從電子商務網站那裏得到報酬,以維繫網站的生存。

    鑑於隱藏的危害性,瑞典已經經過對cookie立法,要求利用cookie的網站必須說明cookie的屬性,而且指導用戶如何禁用cookie。

腳本攻擊

    儘管cookie沒有病毒那麼危險,但它仍包含了一些敏感信息:用戶名,計算機名,使用的瀏覽器和曾經訪問的網站。用戶不但願這些內容泄漏出去,尤爲是當其中還包含有私人信息的時候。

    這並不是危言聳聽,一種名爲Cross site scripting的工具能夠達到此目的。在受到Cross site scripting攻擊時,cookie盜賊和cookie毒藥將竊取內容。一旦cookie落入攻擊者手中,它將會重現其價值。

    cookie盜賊:蒐集用戶cookie併發給攻擊者的黑客。攻擊者將利用cookie信息經過合法手段進入用戶賬戶。

    cookie毒藥:利用安全機制,攻擊者加入代碼從而改寫cookie內容,以便持續攻擊。

替代品

    鑑於cookie的侷限和反對者的聲音,有以下一些替代方法:

    Brownie方案,是一項開放源代碼工程,由SourceForge發起。Brownie曾被用以共享在不一樣域中的接入,而cookies則被構想成單一域中的接入。這項方案已經中止開發。

P3P,用以讓用戶得到更多控制我的隱私權利的協議。在瀏覽網站時,它相似於cookie。

    在與服務器傳輸數據時,經過在地址後面添加惟一查詢串,讓服務器識別是否合法用戶,也能夠避免使用cookie。

具體含義

    cookie 從來指就着牛奶一塊兒吃的點心。然而,在因特網內,「cookie」這個字有了徹底不一樣的意思。那麼「cookie」究竟是什麼呢?「Cookie」是小量信息,由網絡服務器發送出來以存儲在網絡瀏覽器上,從而下次這位獨一無二的訪客又回到該網絡服務器時,可從該瀏覽器讀回此信息。這是頗有用的,讓瀏覽器記住這位訪客的特定信息,如上次訪問的位置、花費的時間或用戶首選項(如樣式表)。Cookie 是個存儲在瀏覽器目錄的文本文件,當瀏覽器運行時,存儲在 RAM 中。一旦閣下從該網站或網絡服務器退出,Cookie 也可存儲在計算機的硬驅上。當訪客結束其瀏覽器對話時,即終止的全部 cookie。

用途

    Cookie 的用途之一是存儲用戶在特定網站上的密碼和 ID。另外,也用於存儲起始頁的首選項。在提供我的化查看的網站上,將要求閣下的網絡瀏覽器利用閣下計算機硬驅上的少許空間來儲存這些首選項。這樣,每次閣下登陸該網站時,閣下的瀏覽器將檢查閣下是否就該惟一的服務器有任何預先定義的首選項(cookie)。若是有的話,瀏覽器將此 cookie 隨閣下對網頁的請求一塊兒發送給服務器。Microsoft 和 Netscape 使用 cookie 在其網站上建立我的起始頁。各家公司利用 cookie 的通常用途包括:在線訂貨系統、網站我的化和網站跟蹤。

    網站我的化是 cookie 最有益的用途之一。例如,當誰來到 CNN 網站,但並不想查看任何商務新聞。網站容許他將該項選爲選項。從那時起(或者直到 cookie 逾期),他在訪問 CNN 網頁時將不會讀到商務新聞。

如何做用

    文檔的 HTML 代碼中的命令行告訴瀏覽器設置某一名稱或數值的 cookie。如下是用來設置 cookie 腳本的一個普通實例。

Set-Cookie: name = VALUE;

expires = DATE;

path = PATH;

domain = DOMAIN_NAME;

    那麼安全性如何?HTTP Cookie 不能用來從閣下的硬驅上檢索我的數據、放置病毒、獲得閣下的電子郵件地址或偷竊有關閣下身份的敏感信息;然而,HTTP Cookie 可用來跟蹤閣下在特定網站上的所到之處。不使用 cookie 就很難進行網站跟蹤。

    至於其餘一切與因特網有關的事,如同閣下所但願的那樣是匿名的。沒有網站知道閣下是誰,除非閣下本身透露給網站。同時,cookie 只是爲了更好地瞭解使用模式並改進網站訪客的效率而採用的一個網站跟蹤統計手段而已。

    若是網站設計師旨在使網頁能與訪客更具互動做用,或者若設計師計劃讓訪客自定義網站的外觀,則就須要使用 cookie。並且,若是閣下想要網站在某些狀況下改變其外觀,cookie 則提供了一條快速、容易的途徑,讓閣下的 HTML 頁面按須要而改變。最新型的服務器使用 cookie 有助於數據庫的互動性,進而改進網站的總體互動性。

傳遞流程

    適用對象:中級讀者

    當在瀏覽器地址欄中鍵入了Amazon的URL,瀏覽器會向Amazon發送一個讀取網頁的請求,並將結果在顯示器上顯示。這時該網頁在你的電腦上尋找Amazon網站設置的Cookie文件,若是找到,瀏覽器會把Cookie文件中的數據連同前面輸入的URL一同發送到Amazon服務器。服務器收到Cookie數據,就會在他的數據庫中檢索你的ID,你的購物記錄、我的喜愛等信息,並記錄下新的內容,增長到數據庫和Cookie文件中去。若是沒有檢測到Cookie或者你的Cookie信息與數據庫中的信息不符合,則說明你是第一次瀏覽該網站,服務器的CGI程序將爲你建立新的ID信息,並保存到數據庫中。

    Cookie是利用了網頁代碼中的HTTP頭信息進行傳遞的,瀏覽器的每一次網頁請求,均可以伴隨Cookie傳遞,例如,瀏覽器的打開或刷新網頁操做。服務器將Cookie添加到網頁的HTTP頭信息中,伴隨網頁數據傳回到你的瀏覽器,瀏覽器會根據你電腦中的Cookie設置選擇是否保存這些數據。若是瀏覽器不容許Cookie保存,則關掉瀏覽器後,這些數據就消失。Cookie在電腦上保存的時間是不同的,這些都是由服務器的設置不一樣決定的。Cookie有一個Expires(有效期)屬性,這個屬性決定了Cookie的保存時間,服務器能夠經過設定Expires字段的數值,來改變Cookie的保存時間。若是不設置該屬性,那麼Cookie只在瀏覽網頁期間有效,關閉瀏覽器,這些Cookie自動消失,絕大多數網站屬於這種狀況。一般狀況下,Cookie包含Server、Expires、Name、value這幾個字段,其中對服務器有用的只是Name和value字段,Expires等字段的內容僅僅是爲了告訴瀏覽器如何處理這些Cookies。

編程實現

    適用對象:高級讀者

    多數網頁編程語言都提供了對Cookie的支持。如javascript、VBScript、Delphi、ASP、SQL、PHP、C#等。在這些面向對象的編程語言中,對Cookie的編程利用基本上是類似的,大致過程爲:先建立一個Cookie對象(Object),而後利用控制函數對Cookie進行賦值、讀取、寫入等操做。那麼如何經過代碼來獲取其餘用戶Cookie中的敏感信息?下面進行簡單的介紹。

    該方法主要有兩步,首先要定位你須要收集Cookie的網站,並對其進行分析,並構造URL;而後編制收集Cookie的PHP代碼,並將其放到你能夠控制的網站上,當不知情者單擊了你構造的URL後能夠執行該PHP代碼。下面咱們看具體的實現過程。

1.分析並構造URL

    首先打開咱們要收集Cookie的網站,這裏假設是登錄網站輸入用戶名「」(不含引號),對數據進行分析就是你可以控制的某臺主機上的一個腳本。須要注意的是「%2B」爲符號「+」的URL編碼,由於「+」將被做爲空格處理。該URL就能夠在論壇中發佈,誘使別人點擊了。

2.編制PHP腳本

    該腳本的做用就是收集Cookie文件,具體內容以下:

$info = getenv("QUERY_STRING";

if ($info) {

$fp = fopen("info.txt","a";

fwrite($fp,$info."\n";

fclose($fp);

}

>

安全問題

    適用對象:全部但願上網安全的讀者

1.Cookie欺騙

    Cookie記錄着用戶的賬戶ID、密碼之類的信息,若是在網上傳遞,一般使用的是MD5方法加密。這樣通過加密處理後的信息,即便被網絡上一些別有用心的人截獲,也看不懂,由於他看到的只是一些無心義的字母和數字。然而,如今遇到的問題是,截獲Cookie的人不須要知道這些字符串的含義,他們只要把別人的Cookie向服務器提交,而且可以經過驗證,他們就能夠冒充受害人的身份,登錄網站。這種方法叫作Cookie欺騙。Cookie欺騙實現的前提條件是服務器的驗證程序存在漏洞,而且冒充者要得到被冒充的人的Cookie信息。目前網站的驗證程序要排除全部非法登陸是很是困難的,例如,編寫驗證程序使用的語言可能存在漏洞。並且要得到別人Cookie是很容易的,用支持Cookie的語言編寫一小段代碼就能夠實現(具體方法見三),只要把這段代碼放到網絡裏,那麼全部人的Cookie都可以被收集。若是一個論壇容許HTML代碼或者容許使用Flash標籤就能夠利用這些技術收集Cookie的代碼放到論壇裏,而後給帖子取一個吸引人的主題,寫上有趣的內容,很快就能夠收集到大量的Cookie。在論壇上,有許多人的密碼就被這種方法盜去的。至於如何防範,目前尚未特效藥,咱們也只能使用一般的防禦方法,不要在論壇裏使用重要的密碼,也不要使用IE自動保存密碼的功能,以及儘可能不登錄不瞭解底細的網站。

2.Flash的代碼隱患

    Flash中有一個getURL()函數,Flash能夠利用這個函數自動打開指定的網頁。所以它可能把你引向一個包含惡意代碼的網站。打個比方,當你在本身電腦上欣賞精美的Flash動畫時,動畫幀裏的代碼可能已經悄悄地連上網,並打開了一個極小的包含有特殊代碼的頁面。這個頁面能夠收集你的Cookie、也能夠作一些其餘的事情,好比在你的機器上種植木馬甚至格式化你的硬盤等等。對於Flash的這種行爲,網站是沒法禁止的,由於這是Flash文件的內部行爲。咱們所能作到的,若是是在本地瀏覽儘可能打開防火牆,若是防火牆提示的向外發送的數據包並不爲你知悉,最好禁止。若是是在Internet上欣賞,最好找一些知名的大網站。

怎樣工做

    要了解Cookie,必不可少地要知道它的工做原理。通常來講,Cookie經過HTTP Headers從服務器端返回到瀏覽器上。

    首先,服務器端在響應中利用Set-Cookie header來建立一個Cookie ,而後,瀏覽器在它的請求中經過Cookie header包含這個已經建立的Cookie,而且把它返回至服務器,從而完成瀏覽器的論證。

    例如,咱們建立了一個名字爲login的Cookie來包含訪問者的信息,建立Cookie時,服務器端的Header以下面所示,這裏假設訪問者的註冊名是「Michael Jordan」,同時還對所建立的Cookie的屬性如pathdomain、expires等進行了指定。

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只能傳送到指定的服務器上,而決不會跑到其餘的如的Web站點上去。Expires屬性則指定了該Cookie保存的時間期限,例如上面的Cookie在瀏覽器上只保存到1999年3月1日1秒。固然,若是瀏覽器上Cookie 太多,超過了系統所容許的範圍,瀏覽器將自動對它進行刪除。至於屬性Path,用來指定Cookie將被髮送到服務器的哪個目錄路徑下。

    說明:瀏覽器建立了一個Cookie後,對於每個針對該網站的請求,都會在Header中帶着這個Cookie;不過,對於其餘網站的請求Cookie是絕對不會跟着發送的。並且瀏覽器會這樣一 直髮送,直到Cookie過時爲止。

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

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小時

什麼都有的:

    這裏還有一點要說明的,好比你的站點有幾個不一樣的目錄,那麼若是隻用不帶路徑的Cookie的話,在一個目錄下的頁面裏設的Cookie在另外一個目錄的頁面裏是看不到的,也就是說,Cookie是面向路徑的。實際上,即便沒有指定路徑,WEB 服務器會自動傳遞當前的路徑給瀏覽器的,指定路徑會強制服務器使用設置的路徑。解決這個問題的辦法是在調用SetCookie時加上路徑和域名,域名的格式能夠是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");

接收和處理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"];

就這麼簡單。

如何刪除

    要刪除一個已經存在的Cookie,有三個辦法:

    一是調用只帶有name參數的SetCookie,那麼名爲這個name的Cookie 將被從關係戶機上刪掉;另外一個辦法是設置Cookie的失效時間爲time()或time()-1,那麼這個Cookie在這個頁面的瀏覽完以後就被刪除了(其實是失效了)。要注意的是,當一個Cookie被刪除時,它的值在當前頁在仍然有效的。右鍵單擊Cookie文件夾——屬性——高級——去掉全部的√——肯定——應用爲——肯定。這樣就能夠不在Cookie裏儲存文件了。

    第三個是*(vista中):在桌面按F1,彈出幫助, 輸入cookie,選擇 刪除Internet cookie,彈出 "Internet 選項",在 瀏覽記錄 一欄裏選擇 「刪除」,而後彈出刪除的內容(包括臨時文件,表單記錄等),選擇 刪除cookie,便可。

    此法,適用於各類瀏覽器,包括360,遨遊,閃遊,火狐等。

讀取操做

/**************************************************

參數說明:

sMainName Cookie名

sSubName Cookie子鍵名,留空表示單值Cookie

**************************************************/

function GetCookie(sMainName,sSubName)

{

var re = new RegExp((sSubName sMainName + "=(.*?&)*?" + sSubName + "=(.*?)(&|;|$)" : sMainName + "=(.*?);"),"i");

return re.test(unescape(document.cookie)) (sSubName RegExp["$2"] : RegExp["$1"]) : "";

}

因爲asp的cookie是通過url編碼的,因此讀以前要unescape一下。

js應用

建立和存儲 cookie

    在這個例子中咱們要建立一個存儲訪問者名字的 cookie。當訪問者首次訪問網站時,他們會被要求填寫姓名。名字會存儲於 cookie 中。當訪問者再次訪問網站時,他們就會收到歡迎詞。

首先,咱們會建立一個可在 cookie 變量中存儲訪問者姓名的函數:

functionsetCookie(c_name,value,expiredays)

{

varexdate=newDate()

exdate.setDate(exdate.getDate()+expiredays)

document.cookie=c_name+"="+escape(value)+

((expiredays==null)?"":";expires="+exdate.toGMTString())

}

    在上面的函數中,咱們首先將天數轉換爲有效的日期,而後,咱們將 cookie 名稱、值及其過時日期存入 document.cookie 對象。上面這個函數中的參數存有 cookie 的名稱、值以及過時天數。

    以後,咱們要建立另外一個函數來檢查是否已設置 cookie:

functiongetCookie(c_name)

{

if(document.cookie.length>0)

{

c_start=document.cookie.indexOf(c_name+"=")

if(c_start!=-1)

{

c_start=c_start+c_name.length+1

c_end=document.cookie.indexOf(";",c_start)

if(c_end==-1)

c_end=document.cookie.length

returnunescape(document.cookie.substring(c_start,c_end))

}

}

return""

}

    最後,咱們要建立一個函數,這個函數的做用是:若是 cookie 已設置,則顯示歡迎詞,不然顯示提示框來要求用戶輸入名字。

functioncheckCookie()

{

username=getCookie('username')

if(username!=null&&username!="")

{alert'Welcomeagain'+username+'!')}

else

{

username=prompt('Pleaseenteryourname:',"")

if(username!=null&&username!="")

{

setCookie('username',username,365)

}

}

}

    上面的函數首先會檢查 document.cookie 對象中是否存有 cookie。假如 document.cookie 對象存有某些 cookie,那麼會繼續檢查咱們指定的 cookie 是否已儲存。若是找到了咱們要的 cookie,就返回值,不然返回空字符串。

這是全部的代碼:

<html>

<head>

<scripttype="text/javascript">

functiongetCookie(c_name)

{

if(document.cookie.length>0)

{

c_start=document.cookie.indexOf(c_name+"=")

if(c_start!=-1)

{

c_start=c_start+c_name.length+1

c_end=document.cookie.indexOf(";",c_start)

if(c_end==-1)

c_end=document.cookie.length

returnunescape(document.cookie.substring(c_start,c_end))

}

}

return""

}

functionsetCookie(c_name,value,expiredays)

{

varexdate=newDate()

exdate.setDate(exdate.getDate()+expiredays)

document.cookie=c_name+"="+escape(value)+

((expiredays==null)?"":";expires="+exdate.toGMTString())

}

functioncheckCookie()

{

username=getCookie('username')

if(username!=null&&username!="")

{alert'Welcomeagain'+username+'!')}

else

{

username=prompt('Pleaseenteryourname:',"")

if(username!=null&&username!="")

{

setCookie('username',username,365)

}

}

}

</script>

</head>

<body"checkCookie()">

</body>

</html>

jsp管理:

    cookie也算http消息報頭的一部分,它的做用有如下方面:

    一 記錄訪客的某些信息。例如能夠利用cookie記錄用戶光臨的網頁次數,或者訪客曾經輸入過的信息。某些網站能夠自動記錄用戶上次登陸的用戶名,用的就是cookie。

    二 頁面之間傳遞變量。瀏覽器並不會保存當前頁面上任何變量的信息,當頁面被關閉時,頁面上的全部變量信息將隨之消失。

使用舉例

在jsp中建立簡單的cookie:

String cookiename="visitTimes";

Cookie cookie=new Cookie(cookiename,"1");

cookie.setMaxAge(10*60);//設置cookie存活期

response.addCookie(cookie);//將cookie寫入客戶端

在jsp中處理cookie數據的經常使用方法:

getDomain();返回cookie的域名.

getMaxAge();返回cookie的存活時間

getName();返回cookie的名字

getPath();返回cookie適用的路徑

getSecure();若是瀏覽器經過安全協議發送Cookie將返回true值,若是瀏覽器使用標準協議剛返回false值

getValue();返回cookie的值

getVersion();返回cookie所聽從的協議版本setComment(String purpose);設置cookie的註釋

setPath(String url);設置Cookie的適用路徑

setSecure(Boolean flag);設置瀏覽器是否僅僅使用安全協議來發送cookie,例如使用Https或ssl

setValue(String newvalue);cookie建立後設置一個新的值

setVersion(int v);設置cookie所聽從的協議版本.

導出

    在Windows XP系統中利用「導入/導出嚮導」能夠方便地導出Cookie信息,方法以下:

    第1步,打開「導入/導出嚮導」並單擊「下一步」按鈕,在打開的「導入/導出選擇」嚮導頁中選中「導出Cookie」選項,並單擊「下一步」按鈕。r

    第2步,在打開的「導出Cookie目標」嚮導頁中,單擊「瀏覽」按鈕指定合適的位置和文件名,並單擊「下一步」按鈕。

    第3步,打開「正在完成導入/導出嚮導」嚮導頁,單擊「完成」按鈕開始導出操做。導出成功後會給出提示,單擊「肯定」按鈕便可。

相關文章
相關標籤/搜索