JavaScript Cookie



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


什麼是 Cookies?

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

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

Cookies 的功能就是用來解決 "如何記錄客戶端的使用者資訊":

  • 當使用者造訪 web 頁面時,他的名字可以記錄在 cookie 中。

  • 在使用者下次造訪該頁面時,可以在 cookie 中讀取使用者存取記錄。

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

#username=John Doe
##當瀏覽器從伺服器上請求web 頁面時, 屬於該頁面的cookies 會被加入到該請求中。服務端透過這種方式來獲取用戶的資訊。


使用 JavaScript 建立Cookie

JavaScript 可以使用

document.cookie 屬性來建立 、讀取、及刪除 cookies。

JavaScript 中,建立cookie 如下所示:

document.cookie="username=John Doe";
您也可以為cookie 新增一個過期時間(以UTC 或GMT 時間)。預設情況下,cookie 在瀏覽器關閉時刪除:

##document.cookie="username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 GMT";
您可以使用path 參數告訴瀏覽器cookie 的路徑。預設情況下,cookie 屬於目前頁面。

document.cookie="username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/";
使用JavaScript 讀取Cookie

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

var x = document.cookie;



使用JavaScript 修改Cookie

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

document.cookie="username= John Smith; expires=Thu, 18 Dec 2013 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 屬性看起來像一個普通的文字字串,其實它不是。資訊是以名/值對的形式顯示的。 新cookie 將會加入document.cookie 中,所以如果您重新讀取document.cookie,您將獲得如下所示的資料:

cookie1=value; cookie2=value;

如果您需要尋找一個指定cookie 值,您必須建立一個JavaScript 函數在cookie 字串中尋找cookie 值。

JavaScript Cookie 實例

在下列實例中,我們將建立 cookie 來儲存訪客名稱。

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

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

在這個實例中我們會建立3 個JavaScript 函數:

#設定cookie 值的函數

  1. 取得cookie 值的函數

  2. 檢測cookie 值的函數

  3. #設定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,傳回""。一個問候資訊。 #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);
    }
  }
}




完整實例


實例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php.cn</title>
</head>
<head>
<script>
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("Welcome again " + user);
	}
	else {
		user = prompt("Please enter your name:","");
  		if (user!="" && user!=null){
    		setCookie("username",user,30);
    	}
	}
}
</script>
</head>
	
<body onload="checkCookie()"></body>
	
</html>


運行實例»

點擊"運行實例" 按鈕查看線上實例

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

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