DELPHI與.Net

程序開發中......... [注明:该Blog中的信息都并非原创,只是作为个人的阅读笔记]

Cookies相关技术

Cookies是一种用来存信息的对象,存在于客户端,是一种比较实用的对象。在众多的电脑书籍中,对该对象的工作原理总是一笔带过,没有做详细的说明(不过也不能怪作者,微软太保密了)。但Cookies对于网站设计人员来说,却是必不可少的。因为设计者往往需要在客户端保存会员的信息,用户在网站的个人设置等等,如果全靠服务器记忆这些数据,容易造成信息丢失(如Session)和烦琐(如靠数据库储存)等。
    签于此,我把我自己使用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())
%> 

    第一句和第二句是对客户端写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")
%> 

    该代码可以读到该作用域内的Cookies信息。读cookies的过程是:先从客户端的内存中找该作用域的Cookies信息,如果没有,从客户端的IE缓存中找该作用域的Cookies文件,如果没有,从上级作用域的Cookies文件中去找...如果都没有,将读不到信息。优先级为:内存本作用域>IE缓存本作用域>IE缓存上级作用域...
3、清Cookies代码: 
<%
  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是读不出来的),需要按规律做相应分离后才能得到相应的值。有兴趣的朋友可自己分离测试。

posted on 2007-03-09 11:43  人淡如菊  阅读(660)  评论(1编辑  收藏  举报

导航