如下實例在頁面載入時執行 checkCookie() 函數。
Cookie 用於存儲 web 頁面的用戶信息。web
Cookie 是一些數據, 存儲於你電腦上的文本文件中。數組
當 web 服務器向瀏覽器發送 web 頁面時,在鏈接關閉後,服務端不會記錄用戶的信息。瀏覽器
Cookie 的做用就是用於解決 "如何記錄客戶端的用戶信息":服務器
Cookie 以名/值對形式存儲,以下所示:cookie
username=John Doe
當瀏覽器從服務器上請求 web 頁面時, 屬於該頁面的 cookie 會被添加到該請求中。服務端經過這種方式來獲取用戶的信息。函數
JavaScript 能夠使用 document.cookie 屬性來建立 、讀取、及刪除 cookie。spa
JavaScript 中,建立 cookie 以下所示:code
document.cookie="username=John Doe";
您還能夠爲 cookie 添加一個過時時間(以 UTC 或 GMT 時間)。默認狀況下,cookie 在瀏覽器關閉時刪除:blog
document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT";
您能夠使用 path 參數告訴瀏覽器 cookie 的路徑。默認狀況下,cookie 屬於當前頁面。 ip
document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";
在 JavaScript 中, 能夠使用如下代碼來讀取 cookie:
var x = document.cookie;
document.cookie 將以字符串的方式返回全部的 cookie,類型格式: cookie1=value; cookie2=value; cookie3=value;
在 JavaScript 中,修改 cookie 相似於建立 cookie,以下所示:
document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";
舊的 cookie 將被覆蓋。
刪除 cookie 很是簡單。您只須要設置 expires 參數爲之前的時間便可,以下所示,設置爲 Thu, 01 Jan 1970 00:00:00 GMT:
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
document.cookie 屬性看起來像一個普通的文本字符串,其實它不是。
即便您在 document.cookie 中寫入一個完整的 cookie 字符串, 當您從新讀取該 cookie 信息時,cookie 信息是以名/值對的形式展現的。
若是您設置了新的 cookie,舊的 cookie 不會被覆蓋。 新 cookie 將添加到 document.cookie 中,因此若是您從新讀取document.cookie,您將得到以下所示的數據:
cookie1=value; cookie2=value;
若是您須要查找一個指定 cookie 值,您必須建立一個JavaScript 函數在 cookie 字符串中查找 cookie 值。
在如下實例中,咱們將建立 cookie 來存儲訪問者名稱。
首先,訪問者訪問 web 頁面, 他將被要求填寫本身的名字。該名字會存儲在 cookie 中。
訪問者下一次訪問頁面時,他會看到一個歡迎的消息。
在這個實例中咱們會建立 3 個 JavaScript 函數:
首先,咱們建立一個函數用於存儲訪問者的名字:
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 的值:
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,將會顯示一個彈窗用於詢問訪問者的名字,並調用 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() 函數。