JavaScript Cookie

JavaScript Cookie


Cookie 用於儲存 web 頁面的使用者資訊。


什麼是 Cookie?

Cookie 是一些資料, 儲存於你電腦上的文字檔案中。

當 web 伺服器向瀏覽器傳送 web 頁面時,在連線關閉後,服務端不會記錄使用者的資訊。

Cookie 的作用就是用於解決 "如何記錄客戶端的使用者資訊":

  • 當用戶訪問 web 頁面時,他的名字可以記錄在 cookie 中。
  • 在使用者下一次訪問該頁面時,可以在 cookie 中讀取使用者訪問記錄。

Cookie 以名/值對形式儲存,如下所示:

username=John Doe

當瀏覽器從伺服器上請求 web 頁面時, 屬於該頁面的 cookie 會被新增到該請求中。服務端通過這種方式來獲取使用者的資訊。


使用 JavaScript 建立Cookie

JavaScript 可以使用 document.cookie 屬性來建立 、讀取、及刪除 cookie。

JavaScript 中,建立 cookie 如下所示:

document.cookie="username=John Doe";

您還可以為 cookie 新增一個過期時間(以 UTC 或 GMT 時間)。預設情況下,cookie 在瀏覽器關閉時刪除:

document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT";

您可以使用 path 引數告訴瀏覽器 cookie 的路徑。預設情況下,cookie 屬於當前頁面。

document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";

使用 JavaScript 讀取 Cookie

在 JavaScript 中, 可以使用以下程式碼來讀取 cookie:

var x = document.cookie;

Note document.cookie 將以字串的方式返回所有的 cookie,型別格式: cookie1=value; cookie2=value; cookie3=value;


使用 JavaScript 修改 Cookie

在 JavaScript 中,修改 cookie 類似於建立 cookie,如下所示:

document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";

舊的 cookie 將被覆蓋。


使用 JavaScript 刪除 Cookie

刪除 cookie 非常簡單。您只需要設定 expires 引數為以前的時間即可,如下所示,設定為 Thu, 01 Jan 1970 00:00:00 GMT:

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

注意,當您刪除時不必指定 cookie 的值。


Cookie 字串

document.cookie 屬性看起來像一個普通的文字字串,其實它不是。

即使您在 document.cookie 中寫入一個完整的 cookie 字串, 當您重新讀取該 cookie 資訊時,cookie 資訊是以名/值對的形式展示的。

如果您設定了新的 cookie,舊的 cookie 不會被覆蓋。 新 cookie 將新增到 document.cookie 中,所以如果您重新讀取document.cookie,您將獲得如下所示的資料:

cookie1=value; cookie2=value;

     

如果您需要查詢一個指定 cookie 值,您必須建立一個JavaScript 函式在 cookie 字串中查詢 cookie 值。


JavaScript Cookie 例項

在以下例項中,我們將建立 cookie 來儲存訪問者名稱。

首先,訪問者訪問 web 頁面, 他將被要求填寫自己的名字。該名字會儲存在 cookie 中。

訪問者下一次訪問頁面時,他會看到一個歡迎的訊息。

在這個例項中我們會建立 3 個 JavaScript 函式:

  1. 設定 cookie 值的函式
  2. 獲取 cookie 值的函式
  3. 檢測 cookie 值的函式

設定 cookie 值的函式

首先,我們建立一個函式用於儲存訪問者的名字:

function setCookie(cname,cvalue,exdays) { var d = new Date(); d.setTime(d.getTime()+(exdays*24*60*60*1000)); var expires = "expires="+d.toGMTString(); document.cookie = cname + "=" + cvalue + "; " + expires; }

函式解析:

以上的函式引數中,cookie 的名稱為 cname,cookie 的值為 cvalue,並設定了 cookie 的過期時間 expires。

該函式設定了 cookie 名、cookie 值、cookie過期時間。


獲取 cookie 值的函式

然後,我們建立一個函式用於返回指定 cookie 的值:

function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for(var i=0; i<ca.length; i++) { var c = ca[i].trim(); if (c.indexOf(name)==0) return c.substring(name.length,c.length); } return ""; }

函式解析:

cookie 名的引數為 cname。

建立一個文字變數用於檢索指定 cookie :cname + "="。

使用分號來分割 document.cookie 字串,並將分割後的字串陣列賦值給 ca (ca = document.cookie.split(';'))。

迴圈 ca 陣列 (i=0;i<ca.length;i++),然後讀取陣列中的每個值,並去除前後空格 (c=ca[i].trim())。

如果找到 cookie(c.indexOf(name) == 0),返回 cookie 的值 (c.substring(name.length,c.length)。

如果沒有找到 cookie, 返回 ""。


檢測 cookie 值的函式

最後,我們可以建立一個檢測 cookie 是否建立的函式。

如果設定了 cookie,將顯示一個問候資訊。

如果沒有設定 cookie,將會顯示一個彈窗用於詢問訪問者的名字,並呼叫 setCookie 函式將訪問者的名字儲存 365 天:

function checkCookie() { var username=getCookie("username"); if (username!="") { alert("Welcome again " + username); } else { username = prompt("Please enter your name:",""); if (username!="" && username!=null) { setCookie("username",username,365); } } }


完整例項

例項

function setCookie(cname,cvalue,exdays){ var d = new Date(); d.setTime(d.getTime()+(exdays*24*60*60*1000)); var expires = "expires="+d.toGMTString(); document.cookie = cname+"="+cvalue+"; "+expires; } function getCookie(cname){ var name = cname + "="; var ca = document.cookie.split(';'); for(var i=0; i<ca.length; i++) { var c = ca[i].trim(); if (c.indexOf(name)==0) { return c.substring(name.length,c.length); } } return ""; } function checkCookie(){ var user=getCookie("username"); if (user!=""){ alert("歡迎 " + user + " 再次訪問"); } else { user = prompt("請輸入你的名字:",""); if (user!="" && user!=null){ setCookie("username",user,30); } } }

嘗試一下 ?

以下例項在頁面載入時執行 checkCookie() 函式。