操纵Cookies
误住,cookie是文档的一个字W串属性。要保存cookieQ只要徏立一个字W串Q格式是name=<value>Q名Uͼ|Q然后把文档?document.cookie 讄成与它相{即可。比如,假设想保存表单接收到的用户名Q那么代码看hpq样Q?
document.cookie = "username" + escape(form.username.value);
在这里,使用 escape() 函数非常重要Q因为cookie值里可能包含分号、逗号或者空根{这是_在读取cookie值时Q必M用对应的unescape()函数lD码?/p>
我们当然q得介绍cookie的四个属性。这些属性用下面的格式加到字W串值后面:(x)
name=<value>[; expires=<date>][; domain=<domain>][; path=<path>][; secure]
名称=<?gt;[; expires=<日期>][; domain=<?gt;][; path=<路径>][; 安全]
<value>, <date>, <domain> ?<path> 应当用对应的值替换?strong><date> 应当使用GMT格式Q可以用Javascript脚本语言的日期类Date?toGMTString() Ҏ(gu)得到q一GMT格式的日期倹{方括号代表q项是可选的。比如在 [; secure]两边的方括号代表要想把cookie讄成安全的Q就需要把"; secure" 加到cookie字符串值的后面。如?; secure" 没有加到cookie字符串后面,那么q个cookie是不安全的。不要把括?lt;> 和方括号[] 加到cookie里(除非它们是某些值的内容Q。设|属性时Q不限属性,可以用Q何顺序设|?
下面是一个例子,在这个例子里Qcookie "username" 被设|成?5分钟之后q期Q可以被服务器上的所有目录访问,可以?mydomain.com"域里的所有服务器讉KQ安全状态ؓ(f)安全?/p>
// Date() 的构造器讄以毫Uؓ(f)单位
// .getTime() Ҏ(gu)q回旉Q单位ؓ(f)毫秒
// 所以要讄15分钟到期Q要?0000毫秒?5分钟
var expiration = new Date((new Date()).getTime() + 15 * 60000);
document.cookie = "username=" + escape(form.username.value)+ "; expires ="
+ expiration.toGMTString() + "; path=" + "/" + "; _
domain=" + "mydomain.com" + "; secure";
dcookies值有点象个小把戏Q因Z一ơ就得到了属于当前文档的所有cookies?/p>
// 下面q个语句d了属于当前文档的所有cookies
var allcookies = document.cookie;
现在Q我们得解析allcookies变量里的不同cookiesQ找到感兴趣的指定cookie。这个工作很单,因ؓ(f)我们可以利用Javascript语言提供的扩展字W串支持?/p>
如果我们对前面分配的cookie "username" 感兴,可以用下面的脚本来读取它的倹{?/p>
// 我们定义一个函敎ͼ用来d特定的cookie倹{?
function getCookie(cookie_name)
{
var allcookies = document.cookie;
var cookie_pos = allcookies.indexOf(cookie_name);
// 如果扑ֈ了烦引,׃表cookie存在Q?
// 反之Q就说明不存在?
if (cookie_pos != -1)
{
// 把cookie_pos攑֜值的开始,只要l值加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脚本q行处理。现在你知道了用Javascript脚本操纵cookies的基本方法。但是,如果你跟我一P那么我们要做的第一件事Q就是徏立一些接口函敎ͼ把cookies处理上的ȝ隐藏h。不q,在你开始编E之前,E候片刅R这些工作,早就有h替你做好了。你要做的,只是到哪Lq些接口函数而已?/p>
比如Q在David Flangan?em>Javascript: The Definitive Guide 3rd Ed.q本书里Q可以找到很好的cookie应用cR你也可以在Oreilly的WEB站点上找到这本书里的例子。本文最后的链接列表里,有一些访问这些cookieCZ的直接链接?/p>
|