<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 2,  comments - 2,  trackbacks - 0
                                                                  
            最近需要用FSO操作文件,有這樣一個(gè)需求,用js操縱cookie保存用戶上次一打開(kāi)文件的路徑,發(fā)現(xiàn)用js操作cookie和用服務(wù)器語(yǔ)言操作cookie有一些差異,還有很多小的細(xì)節(jié)需要注意,如果運(yùn)用不得當(dāng)會(huì)引發(fā)很多不可預(yù)料的結(jié)果。當(dāng)我遇到問(wèn)題的時(shí)候在網(wǎng)上查了很多這方面的資料,發(fā)現(xiàn)好多都是簡(jiǎn)單以理論的方式介紹了js如何操作cookie。但我照著做卻發(fā)現(xiàn)有些地方根本就不是這么回事,下面我總結(jié)了我在用js操作cookie的一些經(jīng)驗(yàn)。

             用js操縱cookie是通過(guò)document對(duì)象下的cookie對(duì)象,其實(shí)document.cookie就是字符串,
    所以我們使用它就像使用字符串一樣,可以使用字符串的所有方法,只不過(guò)這個(gè)字符串需要有個(gè)格式(key=value),設(shè)置cookie的示例代碼如下

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

             cookie的值不能使用分號(hào)(;)、逗號(hào)(,)、等號(hào)(=)以及空格。在cookie的名中做到這點(diǎn)很容易,但要保存的值是不確定的。如何來(lái)存儲(chǔ)這些值呢?方 法是用escape()函數(shù)進(jìn)行編碼,它能將一些特殊符號(hào)使用十六進(jìn)制表示,例如空格將會(huì)編碼為“20%”,從而可以存儲(chǔ)于cookie值中,而且使用此 種方案還可以避免中文亂碼的出現(xiàn)。value上使用了escape方法。在取值的時(shí)候需要unescape(value)對(duì)value再進(jìn)行轉(zhuǎn)碼即可。

              如果想設(shè)置多個(gè)cookie需要多次使用這樣的方法。正確的設(shè)置方法是:
              document.cookie="key=escape(value)";
              document.cookie="key1=escape(value1)"
              而不是
              document.cookie="key=escape(value);key1=escape(value1)";

             如果想取出cookie的值,可以直接調(diào)用document.cookie獲得,如果有多個(gè)值,多個(gè)值用分號(hào)(;)分隔,每個(gè)值用等號(hào)(=)分隔,我們可以對(duì)cookie先按照分號(hào)(;)進(jìn)行分隔(split),然后再按等號(hào)(=)分隔(split)。然后循環(huán)比較key的值,如果key相等,則取出value。需要注意一點(diǎn),如果有多個(gè)值,第二個(gè)值的key值前面多一個(gè)空格,需要去除。下面我給出獲取cookie的示例代碼

              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]);
                              }  
                    } 
               }

              經(jīng)過(guò)前面的示例代碼在一個(gè)頁(yè)面設(shè)置cookie后在這個(gè)頁(yè)面也能取到,但是cookie存在哪里了。通常情況下,cookie會(huì)存放在C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files目錄下。但是我們刪除了這個(gè)文件夾下的所有文件后,再獲得cookie,還能夠訪問(wèn)到。關(guān)閉瀏覽器后,再次打開(kāi)瀏覽器后還能獲得到cookie。那cookie的默認(rèn)生存期是多久呢。怎么才能清除cookie呢。非常抱歉,我也不知道存哪了,但是只要注銷或重啟之后,設(shè)置的cookie將銷毀。我個(gè)人認(rèn)為這是設(shè)計(jì)js的cookie的一個(gè)bug.因?yàn)橛脩舨荒軌蛲ㄟ^(guò)一種方式及時(shí)清除cookie是非常不友好的。我們可以通過(guò)設(shè)置cookie時(shí)可以傳遞一個(gè)屬性expires,該屬性的作用是設(shè)置cookie的生存期。設(shè)置cookie的生存期的示例代碼如下:

          var liveDate = new Date();
          liveDate.setTime(liveDate.getTime() + 3*24*60*60*1000);
          document.cookie="name=test;expires=" + liveDate.toGMTString();
          上面代碼設(shè)置cookie的name的存活時(shí)間為3天。刪除cookie的值就是設(shè)置expires一個(gè)過(guò)期的時(shí)間即可,示例代碼如下
          var liveDate = new Date();
          liveDate.setTime(liveDate.getTime() - 10000);
          document.cookie = "name=test;expires=" + date.toGMTString();

          但是有趣的是,設(shè)置了expires屬性后,我們?cè)贑:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files目錄下發(fā)現(xiàn)有存儲(chǔ)cookie的文件。此時(shí)我們刪除該文件后,發(fā)現(xiàn)設(shè)置的cookie確實(shí)銷毀了。這正符合我們的要求。所以建議用js設(shè)置cookie的時(shí)候一定要設(shè)置expires屬性,正常來(lái)說(shuō)我們要用到cookie的時(shí)候就應(yīng)該根據(jù)需求明確設(shè)計(jì)cookie存活多久。

            下面我們?cè)僬f(shuō)一下js操作cookie的作用域。默認(rèn)情況下js操作cookie的作用域是目錄級(jí)的,也就是在當(dāng)前目錄下設(shè)置的cookie,當(dāng)前目錄及該目錄下的所有子目錄下的所有文件都能夠訪問(wèn)該cookie,例如在http://localhost:8090/APPTest/aaa/testCookie.html中設(shè)置的cookie,在http://localhost:8090/APPTest/aaa/目錄下的所有文件和http://localhost:8090/APPTest/aaa/bbb/下的所有文件都能夠訪問(wèn)到這個(gè)cookie,而在http://localhost:8090/APPTest/目錄下的文件就不能夠訪問(wèn)該cookie。設(shè)置cookie時(shí)有一個(gè)path屬性能夠改變cookie的有效訪問(wèn)路徑。但是目前path只能設(shè)置一個(gè)參數(shù)即"/",代表是根路徑。示例代碼如下:

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

              如果設(shè)置了path="/",則不管設(shè)置cookie在哪個(gè)路徑,在http://localhost:8090/APPTest/
    下及所有目錄及子目錄下都能夠訪問(wèn)到這個(gè)cookie.理論上如果設(shè)置path="\aaa",該cookie的作用域應(yīng)該是aaa目錄下及aaa目錄下的所有子目錄下都能夠訪問(wèn)到這個(gè)cookie,但實(shí)際上并沒(méi)有實(shí)現(xiàn)這樣的功能,我認(rèn)為這也是js實(shí)現(xiàn)cookie的一個(gè)bug。這里有兩個(gè)問(wèn)題需要注意,一是如果設(shè)置兩個(gè)同名的cookie,如http://localhost:8090/APPTest/aaa/下設(shè)置了兩個(gè)cookie,一個(gè)設(shè)置了path為"/",另一個(gè)cookie不帶path參數(shù),那么在http://localhost:8090/APPTest/aaa/會(huì)訪問(wèn)到兩個(gè)同名的cookie值,而在路徑為http://localhost:8090/APPTest/只能訪問(wèn)到全局的cookie值。但是我們沒(méi)有辦法通過(guò)路徑去區(qū)分。第二個(gè)需要注意的就是刪除cookie,如果設(shè)置cookie時(shí)帶path屬性,那么在刪除的時(shí)候一定要加上path屬性,否則刪除的是當(dāng)前目錄下設(shè)置的cookie值。

             另外在設(shè)置cookie時(shí)還能夠設(shè)置兩個(gè)屬性,分別是domain和secure,domain代表設(shè)置cookie的訪問(wèn)域,下面我給出domain基本理論。
    例如:www.google.com和gmail.google.com就是兩個(gè)不同的主機(jī)名。默認(rèn)情況下,一個(gè)主機(jī)中創(chuàng)建的cookie在另一個(gè)主機(jī)下是不能被訪問(wèn)的,但可以通過(guò)domain參數(shù)來(lái)實(shí)現(xiàn)對(duì)其的控制,其語(yǔ)法格式為:
               document.cookie="name=value;domain=cookieDomain";
               以google為例,要實(shí)現(xiàn)跨主機(jī)訪問(wèn),可以寫(xiě)為:
               document.cookie="name=value;domain=.google.com";
               這樣,所有g(shù)oogle.com下的主機(jī)都可以訪問(wèn)該cookie。 因?yàn)檫@個(gè)參數(shù)我沒(méi)有測(cè)試過(guò)也沒(méi)有用過(guò),所以如果當(dāng)用到這個(gè)參數(shù),可以參考上面的理論部分。

             secure代表該cookie是否是安全的。如果設(shè)置了該屬性,只有使用https協(xié)議才能夠訪問(wèn)到
    該cookie.

             下面給出cookie的完整格式
              name=<value>[; expires=<date>][; domain=<domain>][; path=<path>][; secure]
              名稱=<值>[; expires=<日期>][; domain=<域>][; path=<路徑>][; 安全]

    posted on 2009-11-23 11:09 java夜未眠 閱讀(4350) 評(píng)論(0)  編輯  收藏 所屬分類: JS

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    <2009年11月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产免费小视频在线观看| 免费在线视频你懂的| 国产成人免费一区二区三区| 亚洲欧洲高清有无| 99国产精品视频免费观看| 亚洲精品无码专区久久久| 国产激情久久久久影院老熟女免费| 亚洲国产激情一区二区三区| 韩国亚洲伊人久久综合影院| 免费大学生国产在线观看p| 理论亚洲区美一区二区三区| 免费人成视频x8x8入口| 成人午夜影视全部免费看| 国产a v无码专区亚洲av| 中文字幕无线码免费人妻| 国产亚洲大尺度无码无码专线| 狠狠躁狠狠爱免费视频无码| 亚洲精品无码鲁网中文电影| 免费在线看黄网站| 亚洲色图在线观看| 很黄很色很刺激的视频免费| 亚洲欧美日韩中文高清www777| 情侣视频精品免费的国产| 十八禁的黄污污免费网站| 国产亚洲精品a在线观看| 国产成人AV免费观看| 亚洲无限乱码一二三四区| 插B内射18免费视频| 麻豆安全免费网址入口| 国产亚洲色婷婷久久99精品| 99视频在线精品免费| 亚洲中文字幕AV每天更新| 免费在线观看你懂的| 黄色片免费在线观看| 91在线亚洲综合在线| xvideos亚洲永久网址| 久久精品无码精品免费专区| 久久精品国产亚洲AV蜜臀色欲 | 永久在线免费观看| 亚洲依依成人亚洲社区| 久久影院亚洲一区|