close

按此前往javascript完整教學目錄

 

 

2. 利用javascriptcookie進行操作:

(1) 建立一個cookie

document.cookie=”名稱=;屬性名一=屬性值一;屬性名二=屬性值二;屬性名三=屬性值三…”;

其中,名稱指的是cookie的名稱,就是cookie的資料值。屬性名就是就是1.(3-2)所提到的expiresdomainpathsecure。在建立cookie時,名稱是一定要寫的,可以不寫(不寫會被瀏覽器默認為空字串),各個屬性名屬性值,也都是可以不寫的。本指令看似簡單,其實是包含了所有javascriptcookie的基本操作。說明如下:

屬性名

屬性值的意義

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

屬性值是個資料夾路徑,表示該cookiedomain中,能被這個路徑中資料夾(及其所有子代資料夾)中的網頁所讀取。該資料夾路徑之外的網頁是無法存取該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

 

 

上一篇:javascript cookie 簡介

下一篇:javascript 刪除cookie

arrow
arrow
    創作者介紹
    創作者 埃伯 的頭像
    埃伯

    程式語言教學

    埃伯 發表在 痞客邦 留言(0) 人氣()