javascript讀寫COOKS

來源:互聯網
上載者:User
沒試,不知道好用不好用
 function getCookie(name)//取cookies函數            {        var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));        if(arr != null) return unescape(arr[2]); return null;    }    function SetCookie(name,value)//兩個參數,一個是cookie的名子,一個是值    {        var Days = 1; //此 cookie 將被儲存 30 天        var exp  = new Date();    //new Date("December 31, 9998");        exp.setTime(exp.getTime() + Days*24*60*60*1000);        document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();    }
JavaScript Cookie 的正確用法function getCookies(name) 

var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)")); 
if(arr != null) return unescape(arr[2]); return ''; 

function setCookie(name, value, expires,

function getCookies(name)
{
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]); return '';
}
function setCookie(name, value, expires, path, domain, secure)
{
var liveDate = new Date();
expires = liveDate.setTime(liveDate.getTime() + expires*60*1000);//毫秒
//expires = new Date((new Date()).getTime() + expires * 60000);//按分鐘
document.cookie = name + "=" + escape (value) +
((expires) ? "; expires=" + expires : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}

以下網上找的資料:
—————————————————
js cookie總結                                                        
最近需要用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=[; expires=][; domain=][; path=][; secure]
名稱=<值>[; expires=<日期>][; domain=<域>][; path=<路徑>][; 安全]


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.