操縱Cookies
請記住,cookie就是文檔的一個字符串屬性。要保存cookie,只要建立一個字符串,格式是name=<value>(名稱=值),然后把文檔的 document.cookie 設置成與它相等即可。比如,假設想保存表單接收到的用戶名,那么代碼看起來就象這樣:
document.cookie = "username" + escape(form.username.value);
在這里,使用 escape() 函數非常重要,因為cookie值里可能包含分號、逗號或者空格。這就是說,在讀取cookie值時,必須使用對應的unescape()函數給值解碼。
我們當然還得介紹cookie的四個屬性。這些屬性用下面的格式加到字符串值后面:
name=<value>[; expires=<date>][; domain=<domain>][; path=<path>][; secure]
名稱=<值>[; expires=<日期>][; domain=<域>][; path=<路徑>][; 安全]
<value>, <date>, <domain> 和 <path> 應當用對應的值替換。<date> 應當使用GMT格式,可以使用Javascript腳本語言的日期類Date的.toGMTString() 方法得到這一GMT格式的日期值。方括號代表這項是可選的。比如在 [; secure]兩邊的方括號代表要想把cookie設置成安全的,就需要把"; secure" 加到cookie字符串值的后面。如果"; secure" 沒有加到cookie字符串后面,那么這個cookie就是不安全的。不要把尖括號<> 和方括號[] 加到cookie里(除非它們是某些值的內容)。設置屬性時,不限屬性,可以用任何順序設置。
下面是一個例子,在這個例子里,cookie "username" 被設置成在15分鐘之后過期,可以被服務器上的所有目錄訪問,可以被"mydomain.com"域里的所有服務器訪問,安全狀態為安全。
// Date() 的構造器設置以毫秒為單位
// .getTime() 方法返回時間,單位為毫秒
// 所以要設置15分鐘到期,要用60000毫秒乘15分鐘
var expiration = new Date((new Date()).getTime() + 15 * 60000);
document.cookie = "username=" + escape(form.username.value)+ "; expires ="
+ expiration.toGMTString() + "; path=" + "/" + "; _
domain=" + "mydomain.com" + "; secure";
讀取cookies值有點象個小把戲,因為你一次就得到了屬于當前文檔的所有cookies。
// 下面這個語句讀取了屬于當前文檔的所有cookies
var allcookies = document.cookie;
現在,我們得解析allcookies變量里的不同cookies,找到感興趣的指定cookie。這個工作很簡單,因為我們可以利用Javascript語言提供的擴展字符串支持。
如果我們對前面分配的cookie "username" 感興趣,可以用下面的腳本來讀取它的值。
// 我們定義一個函數,用來讀取特定的cookie值。
function getCookie(cookie_name)
{
var allcookies = document.cookie;
var cookie_pos = allcookies.indexOf(cookie_name);
?// 如果找到了索引,就代表cookie存在,
?// 反之,就說明不存在。
?if (cookie_pos != -1)
?{
??// 把cookie_pos放在值的開始,只要給值加1即可。
??cookie_pos += cookie_name.length + 1;
??var cookie_end = allcookies.indexOf(";", cookie_pos);
??if (cookie_end == -1)
??{
???cookie_end = allcookies.length;
??}
??var value = unescape(allcookies.substring(cookie_pos, cookie_end));
?}
?return value;
}
// 調用函數
var cookie_val = getCookie("username");
上面例程里的 cookie_val 變量可以用來生成動態內容,或者發送給服務器端CGI腳本進行處理。現在你知道了使用Javascript腳本操縱cookies的基本方法。但是,如果你跟我一樣,那么我們要做的第一件事,就是建立一些接口函數,把cookies處理上的麻煩隱藏起來。不過,在你開始編程之前,稍候片刻。這些工作,早就有人替你做好了。你要做的,只是到哪去找這些接口函數而已。
比如,在David Flangan的Javascript: The Definitive Guide 3rd Ed.這本書里,可以找到很好的cookie應用類。你也可以在Oreilly的WEB站點上找到這本書里的例子。本文最后的鏈接列表里,有一些訪問這些cookie示例的直接鏈接。
|