<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操作文件,有這樣一個需求,用js操縱cookie保存用戶上次一打開文件的路徑,發現用js操作cookie和用服務器語言操作cookie有一些差異,還有很多小的細節需要注意,如果運用不得當會引發很多不可預料的結果。當我遇到問題的時候在網上查了很多這方面的資料,發現好多都是簡單以理論的方式介紹了js如何操作cookie。但我照著做卻發現有些地方根本就不是這么回事,下面我總結了我在用js操作cookie的一些經驗。

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

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

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

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

             如果想取出cookie的值,可以直接調用document.cookie獲得,如果有多個值,多個值用分號(;)分隔,每個值用等號(=)分隔,我們可以對cookie先按照分號(;)進行分隔(split),然后再按等號(=)分隔(split)。然后循環比較key的值,如果key相等,則取出value。需要注意一點,如果有多個值,第二個值的key值前面多一個空格,需要去除。下面我給出獲取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]);
                              }  
                    } 
               }

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

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

          但是有趣的是,設置了expires屬性后,我們在C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files目錄下發現有存儲cookie的文件。此時我們刪除該文件后,發現設置的cookie確實銷毀了。這正符合我們的要求。所以建議用js設置cookie的時候一定要設置expires屬性,正常來說我們要用到cookie的時候就應該根據需求明確設計cookie存活多久。

            下面我們再說一下js操作cookie的作用域。默認情況下js操作cookie的作用域是目錄級的,也就是在當前目錄下設置的cookie,當前目錄及該目錄下的所有子目錄下的所有文件都能夠訪問該cookie,例如在http://localhost:8090/APPTest/aaa/testCookie.html中設置的cookie,在http://localhost:8090/APPTest/aaa/目錄下的所有文件和http://localhost:8090/APPTest/aaa/bbb/下的所有文件都能夠訪問到這個cookie,而在http://localhost:8090/APPTest/目錄下的文件就不能夠訪問該cookie。設置cookie時有一個path屬性能夠改變cookie的有效訪問路徑。但是目前path只能設置一個參數即"/",代表是根路徑。示例代碼如下:

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

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

             另外在設置cookie時還能夠設置兩個屬性,分別是domain和secure,domain代表設置cookie的訪問域,下面我給出domain基本理論。
    例如:www.google.com和gmail.google.com就是兩個不同的主機名。默認情況下,一個主機中創建的cookie在另一個主機下是不能被訪問的,但可以通過domain參數來實現對其的控制,其語法格式為:
               document.cookie="name=value;domain=cookieDomain";
               以google為例,要實現跨主機訪問,可以寫為:
               document.cookie="name=value;domain=.google.com";
               這樣,所有google.com下的主機都可以訪問該cookie。 因為這個參數我沒有測試過也沒有用過,所以如果當用到這個參數,可以參考上面的理論部分。

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

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

    posted @ 2009-11-23 11:09 java夜未眠 閱讀(4350) | 評論 (0)編輯 收藏
    僅列出標題  

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 香蕉大伊亚洲人在线观看| 无码乱人伦一区二区亚洲| 亚洲成a人无码亚洲成www牛牛| 69影院毛片免费观看视频在线 | 亚洲成a∨人片在无码2023| 久久精品无码一区二区三区免费| 亚洲六月丁香六月婷婷蜜芽| 九九精品免费视频| 免费黄网站在线观看| 亚洲人成伊人成综合网久久久| 久久一区二区三区免费| 亚洲国产成人久久综合一| 亚洲妇女无套内射精| 波多野结衣中文一区二区免费 | 最近免费中文字幕中文高清| 亚洲AV无码乱码国产麻豆| 99爱免费观看视频在线| 亚洲一区二区影视| 全黄a免费一级毛片人人爱| 久久国产乱子伦精品免费午夜| 久久亚洲国产成人亚| 麻豆一区二区免费播放网站| 亚洲乱人伦中文字幕无码| 国产乱辈通伦影片在线播放亚洲 | 一区二区三区免费在线观看| 日韩免费a级毛片无码a∨| 亚洲精品久久久久无码AV片软件| 免费一级大黄特色大片| 免费无码又爽又刺激高潮软件 | 亚洲美女视频免费| 成人免费无码大片A毛片抽搐| 青青视频免费在线| 久久亚洲精品成人无码网站| 精品无码国产污污污免费| 国产特黄特色的大片观看免费视频| 久久狠狠高潮亚洲精品| 亚洲国产婷婷香蕉久久久久久| 亚洲色中文字幕在线播放| 亚洲黄色免费观看| 国产亚洲精品第一综合| 国产精品四虎在线观看免费|