麻辣家族討論版版's Archiver

小誌 發表於 2010-5-19 08:08

(教學第28篇) 使用 Cookies 下篇

[color=DarkOrange][size=5][b]讀取Cookies[/b][/size][/color]
在一個Cookie檔案內可以包含多個Cookies資訊,所以,當我們要讀取某個Cookies資訊時可就累了,必須要在Cookie檔案內進行搜尋。同時,一個Cookies資訊裡還包含Cookies的名稱及它所代表的資料值,我們還得分解名稱與資料值,假設在我們Cookie檔案內的內容如下:[code]myname=charles; age=30[/code]在這個Cookie檔案內有兩個Cookies:一個是「myname」,它的值為「charles」;另一個是「myname」,它的值為「30」,而兩個Cookies之間是使用一個分號及一個空白(space)來區隔。
那如果我要取「myname」這個Cookies的值「charles」該如何處理?

[color=Green][size=4][b]位置搜尋法[/b][/size][/color]
我們來建立一個擷取Cookies值的函式,假設這個擷取函式的名稱為getValue(),當我們想要得知某個Cookies的值時,只要呼叫getValue()函式,同時在呼叫時傳遞一個Cookies的名稱給getValue()函式,getValue()函式就會取得此Cookies的值:
Cookies擷取函式[code]function getValue(cookiesname)
{
cookiesname = cookiesname + “=”
if (document.cookie.length > 0)
}
position = document.cookie.indexOf(cookiesname)
if (position != -1)
{
position = position + cookiesname.length
endposition = document.cookie.indexOf(“;” , position)
if (endposition == -1)
{
endposition = document.cookie.length
}
return unescape(document.cookie.substring(position,endposition))
}
}
return null
}[/code][list]
[*]程式碼第3行,將我們要尋找的Cookies名稱再加上一個等號「=」,因為等號之後的內容才是Cookies的值。
[*]在搜尋與擷取Cookies的值之前,我們先判斷Cookie檔案中是否存在Cookies資訊,當Cookie檔案長度大於0,代表檔案內有Cookies存在,才開始執行搜尋與擷取Cookies的動作(程式碼第4行)。
[*]程式碼第5行,接著利用indexOf()函式開始搜尋Cookies的位置,並將搜尋後的Cookies名稱位置設定給變數position。
[*]程式碼第6行,先判斷搜尋Cookies名稱的結果,如果變數position不等於-1,代表我們要搜尋的Cookies存在,此時才開始進行Cookies值的擷取工作。
[*]程式碼第8行,為何要將position變數值加上Cookies名稱(現在是:Cookies名=)的長度?因為等號之後的內容才是Cookies的值,position變數值加上Cookies名稱的長度,才是擷取Cookies值的起始位置!
[*]程式碼第9行,決定擷取Cookies值的終止位置,因為每個Cookies的尾端都會有一個分號「;」作為結束點,所以,我們只要由Cookies值的起始位置往後找到分號,就可得到Cookies值的終止位置。
[*]程式碼第10到13行,這是預防我們要找的Cookies剛好是全部Cookies中的最後一個,如果是最後一個,那麼Cookies值的尾端就不會有一個分號「;」,所以Cookies值的終止位置就剛好是Cookie檔案的長度。
[*]程式碼第14行,擷取Cookies值起始位置至Cookies值終止位置的Cookies值。
[/list]

[color=Magenta][size=4][b] 實例學習:[/b][/size][/color]
將寫入的瀏覽者姓名擷取出來。[code]<HTML>
<HEAD>
<TITLE>擷取Cookies</TITLE>
</HEAD>
<BODY>
<SCRIPT Language="JavaScript">
//Cookies值擷取函式
function getValue(cookiesname)
{
cookiesname = cookiesname + "="
if (document.cookie.length > 0)
{
position = document.cookie.indexOf(cookiesname)
if (position != -1)
{
position = position + cookiesname.length
endposition = document.cookie.indexOf(";" , position)
if (endposition == -1)
{
endposition = document.cookie.length
}
return unescape(document.cookie.substring(position,endposition))
}
}
return null
}

//呼叫Cookies值擷取函式
name=getValue("username")
//將取出的Cookies顯示出來
alert ("你的名字是:" + name)

</SCRIPT>
</BODY>
</HTML>[/code][attach]726[/attach]

       [color=Red]提示!![/color]
Escape函式會將特殊字元或符號以對應的escape字串替代,若我們要還原這些特殊字元或符號則可以使用unscape函式將其還原。

小誌 發表於 2010-5-19 08:10

[color=DarkOrange][size=5][b]刪除Cookies[/b][/size][/color]
要將Cookies刪除方法很簡單,只要將Cookies的到期日設定為「過去的日期」即可,所謂的「過去的日期」就是比你目前系統時間還早的日期啦!但是,你所要更新的Cookies名稱必須與你要刪除的Cookies名稱相同!

假設你的機器裡有一個Cookies它的名稱是testCookies,現在你要把它刪除了:[code]cookiesname=”testCookies”
deltime=”Thu, 29 Sep 1990 00:00:01 GMT”
document.cookie = cookiesname + ”=; expires=” + deltime[/code]注意喔!deltime變數內的日期是格林威治格式,而且是要比你系統時間更早的日期。

如果你覺得每次刪除Cookies都要寫一長串的日期很煩,那就把刪除Cookies的敘述寫成一個函式吧!當你要刪除Cookies的時候,就呼叫函式並傳給函式一個Cookies名稱就可以將該Cookies刪除了,如下面這個clear()函式:[code]function clear(cookiesname)
{
document.cookie = cookiesname + ”=; expires= Thu, 29 Sep 1990 00:00:01 GMT”
}[/code]clear()函式只是將你想刪除的Cookies值清除,並把到期日設定為以前的時間而已,你不要以為這樣Cookies就不見了呦!還要等你將瀏覽器關閉之後,它才會真正的消失。

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供