標題:
[教學]
(教學第28篇) 使用 Cookies 下篇
[打印本頁]
作者:
小誌
時間:
2010-5-19 08:08
標題:
(教學第28篇) 使用 Cookies 下篇
讀取Cookies
在一個Cookie檔案內可以包含多個Cookies資訊,所以,當我們要讀取某個Cookies資訊時可就累了,必須要在Cookie檔案內進行搜尋。同時,一個Cookies資訊裡還包含Cookies的名稱及它所代表的資料值,我們還得分解名稱與資料值,假設在我們Cookie檔案內的內容如下:
myname=charles; age=30
複製代碼
在這個Cookie檔案內有兩個Cookies:一個是「myname」,它的值為「charles」;另一個是「myname」,它的值為「30」,而兩個Cookies之間是使用一個分號及一個空白(space)來區隔。
那如果我要取「myname」這個Cookies的值「charles」該如何處理?
位置搜尋法
我們來建立一個擷取Cookies值的函式,假設這個擷取函式的名稱為getValue(),當我們想要得知某個Cookies的值時,只要呼叫getValue()函式,同時在呼叫時傳遞一個Cookies的名稱給getValue()函式,getValue()函式就會取得此Cookies的值:
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
}
複製代碼
程式碼第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值。
實例學習:
將寫入的瀏覽者姓名擷取出來。
<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>
複製代碼
[attach]726[/attach]
提示!!
Escape函式會將特殊字元或符號以對應的escape字串替代,若我們要還原這些特殊字元或符號則可以使用unscape函式將其還原。
作者:
小誌
時間:
2010-5-19 08:10
刪除Cookies
要將Cookies刪除方法很簡單,只要將Cookies的到期日設定為「過去的日期」即可,所謂的「過去的日期」就是比你目前系統時間還早的日期啦!但是,你所要更新的Cookies名稱必須與你要刪除的Cookies名稱相同!
假設你的機器裡有一個Cookies它的名稱是testCookies,現在你要把它刪除了:
cookiesname=”testCookies”
deltime=”Thu, 29 Sep 1990 00:00:01 GMT”
document.cookie = cookiesname + ”=; expires=” + deltime
複製代碼
注意喔!deltime變數內的日期是格林威治格式,而且是要比你系統時間更早的日期。
如果你覺得每次刪除Cookies都要寫一長串的日期很煩,那就把刪除Cookies的敘述寫成一個函式吧!當你要刪除Cookies的時候,就呼叫函式並傳給函式一個Cookies名稱就可以將該Cookies刪除了,如下面這個clear()函式:
function clear(cookiesname)
{
document.cookie = cookiesname + ”=; expires= Thu, 29 Sep 1990 00:00:01 GMT”
}
複製代碼
clear()函式只是將你想刪除的Cookies值清除,並把到期日設定為以前的時間而已,你不要以為這樣Cookies就不見了呦!還要等你將瀏覽器關閉之後,它才會真正的消失。
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)