1.使用Cookie字典
Cookie字典就是在客户端存储的一张二维关系表,该表的名字是定义的Cookie字典的名字。引用同一个 字典中的不同变量所设置的key值,不同的key值对应不同的变量。因此字典的名字和每个key值构成了一个完整的Cookie变量名。定义一个字典并指 定其中所包含的变量为以下格式:
Response.Cookies(cookie)(key)=value
key被称为关键字,用来标识同一个字典中不同的变量,如下面的程序中定义了一个客户信息的字典customer,并在这个字典中定义了若干个与customer相关的变量。
<%
Response.Cookies("Customer")("name")="wang" '记录用户名
Response.Cookies("Customer")("age")="24" '记录用户年龄
Response.Cookies("Customer")("mail")=xxx@mail.com '记录用户电子邮箱
%>
在上面的字典customer中,定义了3个变量:name、age和mail,就像数据库中表上的不同字段,每个Cookie变量的值相当于每个字段的值。
当分不清一个Cookie是一个字典还是一个变量时,可以用haskeys属性来判断。
<%
if not response.cookies("customer").haskeys then '判断haskeys属性
response.write"这不是一个字典" '输出这不是一个字典
else
response.write"这是一个字典" '输出这是一个字典
end if
%>
其运行结果如图4-11所示。
对于一个字典,可以通过循环来引用其中所包含的所有变量及其值。以下程序将customer字典中的变量全部 置空。
<%
if not response.cookies("customer").haskeys then
response.cookies("customer")=" "
else
for each key in response.cookies("customer")
response.cookies("customer")(key)=" "
next
end if
%>
2.读取Cookie值
Cookie是需要读取Cookie的名称。Key选项的意义与定义Cookie相同,表示某个Cookie 字典中的关键字。属性attribute只有一个HasKeys的值,用来判断一个Cookie是否为字典,用法与定义Cookie时使用的完全相同。 Request对象负责从客户端把Cookie读取出来。Request读取Cookie的一般格式为:
Request.Cookies(cookie)[(key)|.attribute]
Cookie字典中的变量和值,可以通过引用关键字来读取。若一个字典不进行关键字引用,而直接使用 Request.Cookies(cookie),那么所有的关键字都将作为返回值。下面的例题是一个Cookie字典wang有两个关键字age和 sex,则使用Request.Cookies(wang)返回:age=24&sex=male。
<%
Request.Cookies("wang")("age")=24
Request.Cookies("wang")("sex")="male"
Request.write request.cookies("wang")
%>
当Cookie在字典wang中,先定义关键字age,后定义sex,但是在采用这种方法读取Cookie 时,先读sex关键字,后读age关键字,顺序是颠倒过来的。若客户端返回了两个相同名称的Cookie,那么Request对象将只读取其中目录层次比 较深的那个Cookie。例如,两个名称都是boy,其中的一个Cookie的path属性设置为wwwroot/asp/,而另一个相同名字的 Cookie的path属性设置为wwwroot/asp/ asppages/,那么最终Request对象读取到的Cookie将是后者。
3.实例应用
当用户在上网的时候,经常会发现网站上有一个计数器,它会提示你是第几位来此网站的。要制作网站计数器,首先 在用户第1次访问该站点时,站点使用Cookie技术在客户端记录下客户端的机器名,然后写入一个Cookie字典,并设置另外一个记录访问次数的关键 字,把用户的访问次数设置为1,也写入一个Cookie字典。然后在用户以后的访问中,服务器读取用户机器上的Cookie,判断出机器名,把访问次数加 1后显示在浏览器中,并且修改Cookie。具体代码如下:
<%
dim servername
dim number
servername=request.cookies("customer")("servername")
number=request.cookies("customer")("number")
if servername=" " then
servername= request.servervariables("server_name")
response.cookies("customer")("servername")=servername '记录服务器名称
response.cookies("customer")("number")=1 '记录第一次访问
response.cookies("customer").expires=#Oct 1,2010# '记录日期
response.cookies("customer").domain=http://www.xxx.com '记录网址
else
response.cookies("customer") ("number")=number+1 '记录第number+1访问
response.write"欢迎你"&servername&",这是你的第"&number&"次访问。"
%>
程序的运行结果如图4-12所示。
图4-12 计数器
当第1次访问时,在客户端并没有要求customer这个Cookie字典,因此使用该字典获取的两个参数 servername和number的值都为空。那就对该字典进行初始化,当再次连接时客户端已经有了这个字典。为了能长期监视该客户端的访问情况,把这 个字典的生命期限设置为2010年10月1日。为了防止其他网站将该Cookie覆盖,还应当设置该Cookie字典的domain域属性。