??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩av不卡在线播放,99精品热视频只有精品10,国产a区久久久http://www.aygfsteel.com/shaojava/category/42813.htmlzh-cnMon, 07 Dec 2009 03:03:10 GMTMon, 07 Dec 2009 03:03:10 GMT60js cookieȝhttp://www.aygfsteel.com/shaojava/archive/2009/11/23/303307.htmljava夜未?/dc:creator>java夜未?/author>Mon, 23 Nov 2009 03:09:00 GMThttp://www.aygfsteel.com/shaojava/archive/2009/11/23/303307.htmlhttp://www.aygfsteel.com/shaojava/comments/303307.htmlhttp://www.aygfsteel.com/shaojava/archive/2009/11/23/303307.html#Feedback0http://www.aygfsteel.com/shaojava/comments/commentRss/303307.htmlhttp://www.aygfsteel.com/shaojava/services/trackbacks/303307.html         最q需要用FSO操作文gQ有q样一个需求,用js操纵cookie保存用户上次一打开文g的\径,发现用js操作cookie和用服务器语a操作cookie有一些差异,q有很多的l节需要注意,如果q用不得当会(x)引发很多不可预料的结果。当我遇到问题的时候在|上查了很多q方面的资料Q发现好多都是简单以理论的方式介l了js如何操作cookie。但我照着做却发现有些地方Ҏ(gu)׃是这么回事,下面我ȝ了我在用js操作cookie的一些经验?

         用js操纵cookie是通过document对象下的cookie对象Q其实document.cookie是字符Ԍ
所以我们用它?yu)像使用字符串一P可以使用字符串的所有方法,只不q这个字W串需要有个格?key=value),讄cookie的示例代码如?/p>

         document.cookie="key=escape(value)";

         cookie的g能用分P;Q、逗号Q?Q、等P=Q以?qing)空根{在cookie的名中做到这点很Ҏ(gu)Q但要保存的值是不确定的。如何来存储q些值呢Q方 法是用escape()函数q行~码Q它能将一些特D符号用十六进制表C,例如I格会(x)~码?#8220;20%”Q从而可以存储于cookiegQ而且使用?U方案还可以避免中文q的出现。value上用了escapeҎ(gu)。在取值的时候需要unescape(value)对value再进行{码即可?/p>

          如果惌|多个cookie需要多ơ用这L(fng)Ҏ(gu)。正的讄Ҏ(gu)是:(x)
          document.cookie="key=escape(value)";
          document.cookie="key1=escape(value1)"
          而不?br />           document.cookie="key=escape(value);key1=escape(value1)";

         如果惛_出cookie的|可以直接调用document.cookie获得Q如果有多个|多个值用分号(;)分隔Q每个值用{号(=)分隔Q我们可以对cookie先按照分?;)q行分隔(split)Q然后再按等?=)分隔(split)。然后@环比较key的|如果key相等Q则取出value。需要注意一点,如果有多个|W二个值的key值前面多一个空|需要去除。下面我l出获取cookie的示例代?/p>

          function getCookie(key){
                var aCookie = document.cookie.split(";");
                for (var i=0; i < aCookie.length; i++){  
                          var aCrumb = aCookie[i].split("=");  
                          if (key === aCrumb[0].replace(/^\s*|\s*$/,"")){   
                                           return unescape(aCrumb[1]);
                          }  
                } 
           }

          l过前面的示例代码在一个页面设|cookie后在q个面也能取到Q但是cookie存在哪里了。通常情况下,cookie?x)存攑֜C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files目录下。但是我们删除了q个文g夹下的所有文件后Q再获得cookie,q能够访问到。关闭浏览器后,再次打开览器后q能获得到cookie。那cookie的默认生存期是多久呢。怎么才能清除cookie呢。非常抱歉,我也不知道存哪了Q但是只要注销或重启之后,讄的cookie销毁。我个h认ؓ(f)q是设计js的cookie的一个bug.因ؓ(f)用户不能够通过一U方式及(qing)时清除cookie是非怸友好的。我们可以通过讄cookie时可以传递一个属性expiresQ该属性的作用是设|cookie的生存期。设|cookie的生存期的示例代码如下:(x)

      var liveDate = new Date();
      liveDate.setTime(liveDate.getTime() + 3*24*60*60*1000);
      document.cookie="name=test;expires=" + liveDate.toGMTString();
      上面代码讄cookie的name的存?gu)zL间ؓ(f)3天。删除cookie的值就是设|expires一个过期的旉卛_Q示例代码如?br />       var liveDate = new Date();
      liveDate.setTime(liveDate.getTime() - 10000);
      document.cookie = "name=test;expires=" + date.toGMTString();

      但是有趣的是Q设|了expires属性后Q我们在C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files目录下发现有存储cookie的文件。此时我们删除该文g后,发现讄的cookie实销毁了。这正符合我们的要求。所以徏议用js讄cookie的时候一定要讄expires属性,正常来说我们要用到cookie的时候就应该Ҏ(gu)需求明设计cookie存活多久?/p>

        下面我们再说一下js操作cookie的作用域。默认情况下js操作cookie的作用域是目录的,也就是在当前目录下设|的cookieQ当前目录及(qing)该目录下的所有子目录下的所有文仉能够讉K该cookie,例如?a target="_blank" eventslistuid="e3">http://localhost:8090/APPTest/aaa/testCookie.html中设|的cookie,?a target="_blank" eventslistuid="e4">http://localhost:8090/APPTest/aaa/目录下的所有文件和http://localhost:8090/APPTest/aaa/bbb/下的所有文仉能够讉K到这个cookie,而在http://localhost:8090/APPTest/目录下的文g׃能够讉K该cookie。设|cookie时有一个path属性能够改变cookie的有效访问\径。但是目前path只能讄一个参数即"/",代表是根路径。示例代码如下:(x)

         document.cookie="key=escape(value);path=/";

          如果讄了path="/"Q则不管讄cookie在哪个\径,?a target="_blank" eventslistuid="e7">http://localhost:8090/APPTest/
下及(qing)所有目录及(qing)子目录下都能够访问到q个cookie.理论上如果设|path="\aaa",该cookie的作用域应该是aaa目录下及(qing)aaa目录下的所有子目录下都能够讉K到这个cookie,但实际上q没有实现这L(fng)功能Q我认ؓ(f)q也是js实现cookie的一个bug。这里有两个问题需要注意,一是如果设|两个同名的cookie,?a target="_blank" eventslistuid="e8">http://localhost:8090/APPTest/aaa/下设|了两个cookie,一个设|了path?/"Q另一个cookie不带path参数,那么?a target="_blank" eventslistuid="e9">http://localhost:8090/APPTest/aaa/?x)访问到两个同名的cookie|而在路径?a target="_blank" eventslistuid="e10">http://localhost:8090/APPTest/只能讉K到全局的cookie倹{但是我们没有办法通过路径d分。第二个需要注意的是删除cookie,如果讄cookie时带path属性,那么在删除的时候一定要加上path属性,否则删除的是当前目录下设|的cookie倹{?/p>

         另外在设|cookie时还能够讄两个属性,分别是domain和secureQdomain代表讄cookie的访问域Q下面我l出domain基本理论?br /> 例如Q?a target="_blank" eventslistuid="e11">www.google.com和gmail.google.com是两个不同的主机名。默认情况下Q一个主Z创徏的cookie在另一个主Z是不能被讉K的,但可以通过domain参数来实现对其的控制Q其语法格式为:(x)
           document.cookie="name=value;domain=cookieDomain";
           以googleZQ要实现跨主问,可以写ؓ(f)Q?
           document.cookie="name=value;domain=.google.com";
           q样Q所有google.com下的L都可以访问该cookie?因ؓ(f)q个参数我没有测试过也没有用q,所以如果当用到q个参数Q可以参考上面的理论部分?/p>

         secure代表该cookie是否是安全的。如果设|了该属性,只有使用https协议才能够访问到
该cookie.

         下面l出cookie的完整格?br />           name=<value>[; expires=<date>][; domain=<domain>][; path=<path>][; secure]
          名称=<?gt;[; expires=<日期>][; domain=<?gt;][; path=<路径>][; 安全]



]]>
վ֩ģ壺 | | ½| | ˶| ̩| | | | ϲ| ɳ| | | | | Ʊ| | ֻ| ӳ| | °| | ͬ| | ʻ| | | ˮ| | | ɽ| IJ| | | | | ¬| | | ǰ| û|