用OO思路处理Cookies

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 chinaok 的 blog

用javascipt创建ood的cookies类富有弹性,可用于各种应用。比如购物卡,登录,浮动窗位置等等。你可以充分发挥你的想象力。文末可下载源程序。

 

简介
浏览器能够通过cookies保留有关数据。象windows的注册表一样,用户不必知道cookies的具体位置,浏览器能找到这些数据。第六代的浏览器,不管是ie还是ns都支持document.cookie属性。通过这个属性来读取或修改cookies的值。不过cookies的存储形式是非结构化的长字符串,需要经过相应的解析后才有意义。

cookies的表达如下,除了name=value以外,其它均为可选:
name=value;
expires=date;
domain=domainname
path=pathname;
secure;

例如:
user=hockeydude; expires=thu,01-jan-70 00:00:01 gmt; domain=www.mydomain.com; path=/images; secure;
pass=gretzky; expires=thu,01-jan-70 00:00:01 gmt; domain=www.mydomain.com; path=/images; secure;

这么长的两个字符串只代表了两个cookies。如果还要再加上电子信箱或其他信息就还得加长字符串。通常都是通过分解这样的字符串来取得各个变量或元素的。这实在是费时费力的事。

我使用面向对象设计(object oriented design,ood)的思路来编写cookies处理函数,其特点如下:

便于增删子项。这是很重要的,有些浏览器限制cookies的使用数量。
通过修改函数可以容易地修改时效数据。通常的做法很麻烦,要拷贝cookies,删除原cookies,修改并重写cookies。
cookies和它的子项存放在数组里。可以根据需要快速而有效地进行修改。这样也无须解析那长长的字符串。

cookies对象的使用
以下是对象的公有方法:

方括号[]内是可选参数
//构造
cookie([定界符,缺省为句点]) - 构造函数

//初始化
getcookiecount() - 返回cookies数量
fetch(index) - 返回指定索引的cookies名字
create(name, days) - 创建cookies及其时效天数
modify(name, days) - 修改cookies的时效天数
delete(name) - 删除cookies及其子项
getcount(name) - 返回cookies的子项数量
additem(name, value) - 增加一个子项
getitem(name, index) - 返回指定索引的子项
delitem(name, index) - 删除指定的子项

//存取
load() - 读取cookies
save() - 存储cookies

下面是应用实例:

<!-- html网页内调用cookies对象 -->
<script language="javascript" src="cookie.js"></script>

<!-- 构造并初始化cookies -->

<script language="javascript">
  //cookies类实例化
  var mycookie = new cookie();

  //如果没有cookies,就创建一个新的cookies
  if(!mycookie.load()){  
 mycookie.create("user", 10);  //创建用户(user)cookies,有效期10天
 mycookie.create("pass", 15);
 
 mycookie.additem("user", "gretzky");  //增加一个用户子项
 mycookie.additem("user", "lemieux");
 mycookie.additem("user", "sakic");
 mycookie.additem("user", "pronger");
 mycookie.additem("pass", "hockey");

 //存储cookies
 mycookie.save();
  }
  else{ //如果存在cookies,直接加载
 //显示cookies的各个子项
 for(i=0; i<mycookie.getcookiecount(); i++)
 {
    for(j=0; j<mycookie.getcount(mycookie.fetch(i)); j++)
      alert(mycookie.fetch(i)+"="+mycookie.getitem(mycookie.fetch(i),j));
 }
  }
</script>

这种ood的cookies类富有弹性,可用于各种应用。比如购物卡,登录,浮动窗位置等等。你可以充分发挥你的想象力。

本例cookies类的缺点:
不能指定不同的cookies路径和域名,
不能定义是否给cookies加密。

缺陷:
删除子项时,不能完全删除干净,比如:
652525254424.hockeydude.dillweed
删除子项后是:
652525254424._____

我还没有找到原因。如果你能发现问题所在,请告诉我。

http://www.chinaok.net/down/200205082027290.zip

本文关键:Cookie
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top