在一個Cookie檔案內可以包含多個Cookies資訊,所以,當我們要讀取某個Cookies資訊時可就累了,必須要在Cookie檔案內進行搜尋。同時,一個Cookies資訊裡還包含Cookies的名稱及它所代表的資料值,我們還得分解名稱與資料值,假設在我們Cookie檔案內的內容如下:
在這個Cookie檔案內有兩個Cookies:一個是「myname」,它的值為「charles」;另一個是「myname」,它的值為「30」,而兩個Cookies之間是使用一個分號及一個空白(space)來區隔。那如果我要取「myname」這個Cookies的值「charles」該如何處理?
位置搜尋法
我們來建立一個擷取Cookies值的函式,假設這個擷取函式的名稱為getValue(),當我們想要得知某個Cookies的值時,只要呼叫getValue()函式,同時在呼叫時傳遞一個Cookies的名稱給getValue()函式,getValue()函式就會取得此Cookies的值:
Cookies擷取函式
- 程式碼第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值。
實例學習:
將寫入的瀏覽者姓名擷取出來。
提示!!
Escape函式會將特殊字元或符號以對應的escape字串替代,若我們要還原這些特殊字元或符號則可以使用unscape函式將其還原。
刪除Cookies
要將Cookies刪除方法很簡單,只要將Cookies的到期日設定為「過去的日期」即可,所謂的「過去的日期」就是比你目前系統時間還早的日期啦!但是,你所要更新的Cookies名稱必須與你要刪除的Cookies名稱相同!
假設你的機器裡有一個Cookies它的名稱是testCookies,現在你要把它刪除了:
注意喔!deltime變數內的日期是格林威治格式,而且是要比你系統時間更早的日期。
如果你覺得每次刪除Cookies都要寫一長串的日期很煩,那就把刪除Cookies的敘述寫成一個函式吧!當你要刪除Cookies的時候,就呼叫函式並傳給函式一個Cookies名稱就可以將該Cookies刪除了,如下面這個clear()函式:
clear()函式只是將你想刪除的Cookies值清除,並把到期日設定為以前的時間而已,你不要以為這樣Cookies就不見了呦!還要等你將瀏覽器關閉之後,它才會真正的消失。
沒有留言:
張貼留言