這裡介紹如何使用 JavaScript 管理瀏覽器的 cookie,並且提供範例教學以及簡單易上手的 API 工具。
瀏覽器的 cookie 可以讓網頁的 JavaScript 程式將少量的資料儲存起來,最常用於儲存網頁的設定值與一些程式 session 相關的資料。
使用 JavaScript 控制 cookie
我們可以在 JavaScript 中直接取得瀏覽器所儲存的 cookie 值:
allCookies = document.cookie;
也可以寫入新的 cookie(或是更新 cookie 值):
document.cookie = newCookie;
這裡的 newCookie 是一個 key=value 格式的字串,這樣的方式一次只能新增或是更新一個 cookie 值。
在寫入 cookie 時的 key=value 字串,還可以加上以下幾種字串來進行一些設定:
;path=path- 設定 cookie 路徑,例如
;path=/my_path,預設為目前的網頁路徑。 ;domain=domain- 設定 cookie 的網域,例如
;domain=gtwang.org,預設為目前的網址上的網域。 ;max-age=max-age-in-seconds- 設定 cookie 的使用期限,單位為秒,例如
60*60*24就是一天。 ;expires=date-in-GMTString-format- 設定 cookie 的使用期限,格式請參考 Date.toUTCString(),這個參數在 HTTP 1.1 之後已經被
max-age取代。 ;secure- 設定 cookie 只能於加密的連線中傳送。
cookie 使用範例
Hello World
document.cookie = "name=oeschger";
document.cookie = "favorite_food=tripe";
function alertCookie() {
alert(document.cookie);
}
在 HTML 中加入一個按鈕,用來顯示所有的 cookie:
<button onclick="alertCookie()">Show cookies</button>
請點擊下面這個按鈕進行測試:
讀取 cookie 中的變數
這是從 cookie 讀取變數的範例:
document.cookie = "test1=Hello";
document.cookie = "test2=World";
var cookieValue = document.cookie.replace(/(?:(?:^|.*;\s*)test2\s*\=\s*([^;]*).*$)|^.*$/, "$1");
function alertCookieValue() {
alert(cookieValue);
}
在 HTML 中加入一個按鈕,用來測試:
<button onclick="alertCookieValue()">Show cookie value</button>
請點擊下面這個按鈕進行測試:
僅執行一次的程式碼
如果希望某一段 JavaScript 程式碼僅執行一次,可以使用 cookie 來判斷:
function doOnce() {
if (document.cookie.replace(/(?:(?:^|.*;\s*)doSomethingOnlyOnce\s*\=\s*([^;]*).*$)|^.*$/, "$1") !== "true") {
alert("Do something here!");
document.cookie = "doSomethingOnlyOnce=true; expires=Fri, 31 Dec 9999 23:59:59 GMT";
}
}
在 HTML 中加入一個按鈕,用來測試:
<button onclick="doOnce()">Only do something once</button>
請點擊下面這個按鈕進行測試:
若要重設上面的 cookie,可以這樣做:
function resetOnce() {
document.cookie = "doSomethingOnlyOnce=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
}
在 HTML 中加入一個按鈕,用來測試:
<button onclick="resetOnce()">Reset only once cookie</button>
請點擊下面這個按鈕進行測試:
js-cookie
如果您不想花太多時間自己撰寫管理 cookie 的程式碼,可以使用 js-cookie 這個 JavaScript API 工具,它可以讓您很直覺的儲存與讀取 cookie 中的資料,不需要去碰 cookie 底層細部的結構。
名稱:js-cookie
網址:https://github.com/js-cookie/js-cookie
以下我們介紹 js-cookie 的安裝與使用方式。
安裝 js-cookie
首先從 GitHub 上下載 js-cookie 的 JavaScript 檔,然後將這個 JavaScript 引入自己的網頁中,放在 <head> 中。
<script src="/path/to/js.cookie.js"></script>
在引入 JavaScript 檔案時,請不要直接使用 GitHub 的 raw 網址(
https://raw.github.com/...),由於 GitHub 這個的網址會以text/plain的形式送出,在某些瀏覽器會被擋掉(例如 Windows 7 的 IE)。
建立 cookie
接下來就可以在 JavaScript 使用 js-cookie 了,若要建立一個 cookie,則使用 set:
Cookies.set('name', 'value');
讀取則是使用 get:
myvar = Cookies.get('name');
設定 cookie 的使用期限:
Cookies.set('name', 'value', { expires: 7 });
這裡的 expires 參數的單位是天,上面這樣的設定就是一個可以使用 7 天的 cookie。若沒有指定 expires,則預設會建立 session cookie(session 結束就刪除的 cookie)。
設定 cookie 的路徑:
Cookies.set('name', 'value', { path: '/mypath' });
設定 cookie 的路徑為目前網頁的路徑:
Cookies.set('name', 'value', { path: '' });
如果沒有指定 path 的話,預設是 /。
刪除 cookie
若要刪除 cookie 可以使用 remove:
Cookies.remove('name');
刪除 cookie 時要注意 cookie 的路徑,路徑的指定方式跟建立時相同:
// 建立 cookie
Cookies.set('name', 'value', { path: '/mypath' });
// 刪除 cookie
Cookies.remove('name', { path: '/mypath' });
JSON
js-cookie 還有一個很好用的功能就是可以將 JavaScript 的物件自動轉為 JSON 字串儲存在 cookie 中(使用 JSON.stringify):
Cookies.set('name', { foo: 'bar' });
使用 get 讀取時,就會得到 JSON 的字串:
Cookies.get('name'); // 得到 '{"foo":"bar"}' 這個字串
亦可直接呼叫 get 不帶任何參數:
Cookies.get(); // 得到 { name: '{"foo":"bar"}' }
如果想要讀取解析過後的 JSON 物件,可以使用 getJSON:
Cookies.getJSON('name'); // 得到 { foo: 'bar' }
Cookies.getJSON(); // 得到 { name: { foo: 'bar' } }
關於 js-cookie 其他更多的使用方式,可以參考 js-cookie 官方網頁上的說明。
