現在你已經掌握了先進的字串處理和相關數組概念,該是我們開啟神奇的cookie魔瓶的時候了.cookie是記錄訪問你的網站的人的資訊,它其實駐留在使用者的硬碟上,即使使用者已經離開你的網站,cookie在使用者的硬碟上仍然存在,如果該使用者再次返回你的網站,則該cookie就會被一起發回到你的伺服器中,便於你統計和處理重複到訪者的資訊.
下面我們看一看一個cookie應用的典型例子,我們在一個網頁中設定cookie,然後通過別的網頁讀取它.在使用該例子的時候,想想如果沒有cookie,你如何做到這一點.
由於cookies牽扯到向使用者的硬碟寫盤和讀取資訊,所以就涉及一個保密性的問題.cookie有其作用範圍以及內在的局限性.其最重要的局限性在於:不是每個人的瀏覽器都歡迎cookies.即便是使用者的瀏覽器歡迎cookies,但使用者也有可能拒絕cookies的訪問(大部分人還是歡迎的)每個網域名稱只分配20個cookies,所以要節省著什麼它們.Cookies不得大於4 KB,當然4,000位元組的容量是足夠的了.
瞭解了這些局限性之後我們開始學習如何設定cookies.設定一個基本的cookie很容易.你所需做的只是在一個cookie_name=value
表單中產生一個字串,然後設定document.cookie屬性.唯一的技巧:cookie值中不能有空格,逗號或分號.好在你無需擔心這些問題,因為有一系列的函數可以幫你對cookies屬性編碼和解碼:
escape()和unescape().
下面的簡單例子中將你的姓名儲存為一個cookie:
function setCookie()
{
var the_name = prompt("What's your name?","");
var the_cookie = "wm_javascript=username:" + escape(the_name);
document.cookie = the_cookie;
alert("Thanks, now go to the next page.");
}
函數中間的兩行是關鍵:
var the_cookie = "wm_javascript=username:" + escape (the_name);
如果我在提示框中輸入了"dave thau",該行代碼將產生一個字串wm_javascript=username:dave%20thau.這就是說我將把一個名為wm_javascript的cookie儲存到硬碟.該cookie的值是username:dave%20thau - 函數 escape()將"dave" 和"thau"之間的空格用%20做了替換.
當我們讀取cookie時,我們尋找名為wm_javascript的cookie,然後提取username:dave%20thau,將其用 unescape()解碼,去掉username:.
document.cookie = the_cookie;
cookie現在就設定好了,很簡單.
一旦你在某使用者的硬碟上設定了cookie,讀取是件很容易的事.下面是讀取cookie範例的代碼:
function readCookie()
{
var the_cookie = document.cookie;
var broken_cookie = the_cookie.split(":");
var the_name = broken_cookie[1];
var the_name = unescape(the_name);
alert("Your name is: " + the_name);
}
第1行很重要.當你的瀏覽器開啟一個網頁時,它調用任何和該網頁有關的cookie然後將其載入document.cookie屬性.
讀取cookie的技巧在於從中抽取出你需要的資訊.注意在我們所設定的cookie是這樣的:wm_javascript=username:dave%20thau.在該函數第1行之後的所有用於從該cookie中提取出使用者名稱(username).
var broken_cookie = the_cookie.split(":");
將cookie在分號處分割成兩部分.
var the_name = broken_cookie[1];
抓取分號後面的內容dave%20thau.
var the_name = unescape(the_name);
取消函數escape()的編碼替換.在本例中重新用空格替換了%20.
alert("Your name is: " + the_name);
顯示你的姓名.
這個例子使用的cookie只儲存了很少的資訊:使用者名稱,cookie最多可以儲存多達4kb的資訊。下一講裡我們講要講一個複雜的例子。