签于此,我把我自己使用Cookies的一些心得写出来,希望对大家有所帮助。
一、ASP中如何使用Cookies:
1、写Cookies代码:
<%
Response.Cookies("xxx")("aaa") = "111"
Response.Cookies("xxx")("bbb") = "222"
Response.Cookies("xxx").Path = "/forum"
Response.Cookies("xxx").Expires = DateAdd("m",1,now())
%>
Response.Cookies("xxx")("aaa") = "111"
Response.Cookies("xxx")("bbb") = "222"
Response.Cookies("xxx").Path = "/forum"
Response.Cookies("xxx").Expires = DateAdd("m",1,now())
%>
第一句和第二句是对客户端写Cooikes,xxx可以看做是一个数据集合,aaa和bbb分别是集合xxx里的键名,111和222分别是aaa和bbb的值。
第三句为xxx指定path(只写),即作用域,可以理解为:写到该作用域的数据,只有在站点下的(如forum)文件夹下(包括子文件夹)的页面内才可以读到,即作用域为(如forum)文件夹。如果去掉该句,默认在本站点下(该代码页所在的位置为子文件夹的话)或该代码页所在的虚拟目录下(如果该代码页所在的位置为虚拟目录的话)有效。例如:在子文件夹下不设定path或path="/",生成的cookies作用域为整个站点;在虚拟目录下不设定path,生成的cookies作用域为本虚拟目录;path="/myasp",生成的cookies作用域为站点下myasp子目录...;
第四句为xxx集合指定expires(只写)失效期。代码所示为一月后失效。有了该句后会在客户IE缓存中生成一个cookies文件,该文件名的命名规则是:如果指定了path,将为path的值(当然无/);如果没有指定path,为该代码页所在的虚拟目录名(如果该代码页所在的位置为虚拟目录的话);如果以上条件都不符合,由客户端的系统自行指定,为Cookie:主机名@域名。如果没有该句,不会生成cookies文件,cookies信息将保存在客户的内存中,该信息在IE进程内有效,即用户关闭该站的所有页面后该信息自行消失。
2、读Cookies代码:
<%
yyy = Request.Cookies("xxx")("aaa")
zzz = Request.Cookies("xxx")("bbb")
%>
yyy = Request.Cookies("xxx")("aaa")
zzz = Request.Cookies("xxx")("bbb")
%>
该代码可以读到该作用域内的Cookies信息。读cookies的过程是:先从客户端的内存中找该作用域的Cookies信息,如果没有,从客户端的IE缓存中找该作用域的Cookies文件,如果没有,从上级作用域的Cookies文件中去找...如果都没有,将读不到信息。优先级为:内存本作用域>IE缓存本作用域>IE缓存上级作用域...
3、清Cookies代码:
<%
Response.Cookies("xxx").path = "/forum"
Response.Cookies("xxx")("aaa") = ""
Response.Cookies("xxx")("bbb") = ""
%>
Response.Cookies("xxx").path = "/forum"
Response.Cookies("xxx")("aaa") = ""
Response.Cookies("xxx")("bbb") = ""
%>
由于ASP无清除Cookies的方法,所以可用令相应作用域相应集合相应键值的内容为空的办法来解决,由于没有指定expires,以往该作用域所生成cookies文件在代码执行后将消失,起到了清除Cookies的作用。
第一句指定作用域,如果没有该句,默认的操作对象为本站点下的cookies或该代码页所在的虚拟目录的cookies(如果该代码页所在的位置为虚拟目录的话)。所以如果Cookies作用域为文件夹的话,必须指定path。
需要说明的几点:
1、因为作用域的关系,一个站点下可能生成几个Cookies。所以在使用时一定要分清作用域,以免读写错信息。
解决的办法为:尽量将站点下分类的文件夹,设成虚拟目录,这样不用指定path,且读写cookies都在本虚拟目录下执行,不易发生错误。
2、一个作用域下只可能生成一个Cookies,所以要存储多个信息时,可用不同的集合来加以区分。
3、尽量给客户提供选择Cookies失效期的权力,以免发生客户信息失窃的现象。
二、客户端脚本中使用Cookies:
由于cookie(注意在此是cookie,不是Cookies)属于IE的document对象的一个属性,所以使用起来远不如ASP方便。但也可以实现一些基本的功能...
1、写Cookies代码: <script language="javascript"> var mydate = new Date(); var str = ''; mydate.setMonth(mydate.getMonth()+1); str = mydate.toUTCString(); document.cookie = 'xxx=aaa=111&bbb=222;path=/forum;expires=' + str; </script>
运行代码 拷贝代码 保存代码 [可先修改部分代码再运行;请先检查代码确定安全]
运行以上代码后,查看你的IE临时文件夹下,是不是生成了一个forum文件名的cookies文件?
path和expires的含义同ASP,只不过用得形式不同而已,失效期字符串的格式必须为(无论JS还是VBS):英文星期, 数字日期 英文月份 yyyy hh:mm:ss UTC不然生不成Cookies...
str中保存得就是该格式的字符串。
2、读cookies时,也用document.cookie,只不过读出来的是xxx=aaa=111&bbb=222形式的子符串(当然path和expires是读不出来的),需要按规律做相应分离后才能得到相应的值。有兴趣的朋友可自己分离测试。