Cookie详解

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是读不出来的),需要按规律做相应分离后才能得到相应的值。有兴趣的朋友可自己分离测试。

 

 

 

注意如果在IE7或者IE8上用,如果浏览器不关闭,那么进程就不算结束,必要要IE全部关闭cookie才会终止。

session的缺点是容易过期,不好控制,而且只要重新编译代码就容易造成session丢失,繁琐,不利于调试;

cookie的缺点是一个机器不能支持两个人同时登录。后登陆的人会擦除前一个人的信息。

你可能感兴趣的:(JavaScript,session,Cookies,IE,asp,Path)