2. 利用javascript對cookie進行操作:
(1) 建立一個cookie:
document.cookie=”名稱=值;屬性名一=屬性值一;屬性名二=屬性值二;屬性名三=屬性值三…”;
其中,名稱指的是cookie的名稱,值就是cookie的資料值。屬性名就是就是1.(3-2)所提到的expires、domain、path、secure。在建立cookie時,名稱是一定要寫的,值可以不寫(不寫會被瀏覽器默認為空字串),各個屬性名和屬性值,也都是可以不寫的。本指令看似簡單,其實是包含了所有javascript對cookie的基本操作。說明如下:
屬性名 |
屬性值的意義 |
expires |
※ 此乃該cookie的有效期限。這所謂的「有效期限」,只對硬體cookie有意義,對記憶體cookie沒意義。一旦當前時間超過這個有效期限,該硬體cookie就無法被瀏覽器所存取。但要注意,就算超過有效期限,硬體cookie未必會消失,仍有可能在硬體中存活一段時間。 ※ 其屬性值代表該cookie的有效期限,其型態是javascript之日期物件的GMT字串格式。可宣告一個日期物件,然後用其成員函式toGMTString()來獲得其GMT字串格式。 ※ 若其屬性值沒有被設定,則瀏覽器會自動將cookie當作記憶體cookie,意即此cookie不會存放在硬碟內,且當使用者關閉瀏覽器時,cookie便自動消失。 |
domain |
※ 此乃該cookie能夠作用的網域。該網域之外的網頁是無法存取該cookie的。 ※ 假設吾人申請到的網域名稱為www.cryst.com,將其屬性值設定為.cryst.com,表示吾人欲讓此cookie能被整個cryst.com及其子網域存取。若不設定其值,則預設為當前網頁所在的網域(此項之屬性值通常不設定)。 |
path |
※ 其屬性值是個資料夾路徑,表示該cookie在domain中,能被這個路徑中資料夾(及其所有子代資料夾)中的網頁所讀取。該資料夾路徑之外的網頁是無法存取該cookie的。 ※ 若其屬性值設定為/,表示該cookie允許網站根目錄下的所有網頁存取之。 ※ 若其屬性值沒有被設定,則會被默認為當前網頁所在的資料夾。譬如說當前網頁的URL網址是: http://localhost/phptt/cookie_test.php 這也就是說其在相對於網站根目錄的路徑是: /phptt/cookie_test.php 那麼當前網頁所在之資料夾路徑(也就是默認路徑)為: /phptt |
secure |
※ 不是每一個cookie都具有secure的屬性,大部分的cookie都不具有此屬性。若一個cookie具有此屬性,表示此cookie所攜帶的資訊其機密性較高,或是說此cookie在傳送時須用安全性較高的協定(如https)傳送,而無法用http來傳送。 ※ 此屬性並沒有屬性值,且預設上,一個cookie並不具有此屬性。所以,若要將cookie賦予此屬性,不必寫屬性名=屬性值,只要寫屬性名就好了。譬如: document.cookie=”username=jade;secure”; |
(2) 用document.cookie的回傳字串來顯示cookie:
document.cookie的回傳字串中包含了所有「歸該網頁管的cookie」的資料,但不包含這些cookie的屬性。其形式為:
名稱一=值一; 名稱二=值二; 名稱三=值三; …
我們稱每個「名稱=值」為一個「配對」,每個配對之間以「分號」加上「空白字元區」隔開,組成document.cookie的回傳字串。
若目前瀏覽器中並沒有任何cookie可供當前網頁使用,則document.cookie之值會是空字串。我們可用以下程式碼來檢查當前網頁「目前有無cookie可用」:
if(document.cookie){document.write("有cookie可用")}
else{document.write("沒有cookie可用");}
(3) 修改一個cookie的設定:
如前所述,每一個cookie都有一個專屬的名稱。所以,在此指令:
document.cookie=”名稱=值;屬性名一=屬性值一;屬性名二=屬性值二;屬性名三=屬性值三…”;
之中,若名稱是一個已經存在的cookie名稱,那麼該指令就會為同一個cookie修改設定。範例如下:
var date1 = new Date();
date1.setTime(date1.getTime()+5*1000);
date1=date1.toUTCString();
var date2 = new Date();
date2.setTime(date2.getTime()+60*1000);
date2=date2.toUTCString();
document.cookie="name=weiwei;expires="+date1;
document.cookie="name=nunu;expires="+date2;
document.write(document.cookie);
則網頁執行後顯示:name=nunu。
(4) 設定一個新的cookie:
如前所述,每一個cookie都有一個專屬的名稱。所以,在此指令:
document.cookie=”名稱=值;屬性名一=屬性值一;屬性名二=屬性值二;屬性名三=屬性值三…”;
之中,若名稱並非是一個已經存在的cookie名稱,那麼該指令就會設定一個新的cookie。範例如下:
var date1 = new Date();
date1.setTime(date1.getTime()+5*1000);
date1=date1.toUTCString();
var date2 = new Date();
date2.setTime(date2.getTime()+60*1000);
date2=date2.toUTCString();
document.cookie="name=weiwei;expires="+date1;
document.cookie="user=nunu;expires="+date2; //這一行設定了新的cookie,其名稱為user。
document.write(document.cookie);
則網頁執行後顯示:name=weiwei; user=nunu。
(5) 刪除cookie:
Javascript並沒有提供一個方便的函式來專門刪除某cookie。我們要達成的效果,應是讓此cookie無法再被瀏覽器所使用。所以,利用:
document.cookie=”名稱=值;屬性名一=屬性值一;屬性名二=屬性值二;屬性名三=屬性值三…”;
將該cookie設為過期(也就是將expires屬性之值設定為早於當前時間),就可以達到這個效果。
(6) 此指令中,
”名稱=值;屬性名一=屬性值一;屬性名二=屬性值二;屬性名三=屬性值三…”
這個字串之內的空白字元是不計的。也就是說:
document.cookie=”名稱=值”;
和:
document.cookie=” 名稱 = 值 ”;
兩句語法的意思和效果完全一模一樣。例如以下程式碼:
document.cookie="user=kkk";
document.write(document.cookie);
執行後會顯示:user=kkk
而換一個寫法:
document.cookie=" user = kkk ";
document.write(document.cookie);
執行後也會顯示:user=kkk
留言列表