隨著互聯(lián)網(wǎng)越來越發(fā)達(dá),網(wǎng)站上大量采用了cookie技術(shù),而javascript作為前端開發(fā)語言之一,可以通過讀取cookie來實(shí)現(xiàn)一些自動(dòng)化功能,例如記住用戶的登錄信息,向用戶顯示個(gè)性化內(nèi)容等。
要讀取cookie,需要使用document.cookie屬性。該屬性會(huì)返回當(dāng)前網(wǎng)頁所有cookie,其中每個(gè)cookie以;分割,并且前面帶有cookie名稱,例如下面示例中“username”就是cookie名稱。
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/;"; document.cookie = "city=Beijing; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/;"; console.log(document.cookie); //結(jié)果為:username=John%20Doe; city=Beijing
讀取cookie需要解析字符串,將其轉(zhuǎn)換為對象形式,然后根據(jù)名稱獲取對應(yīng)的值。以下代碼實(shí)現(xiàn)了讀取名為“username”的cookie值的函數(shù):
function getCookie(name) { var cookieArr = document.cookie.split("; "); for (var i = 0; i < cookieArr.length; i++) { var cookiePair = cookieArr[i].split("="); if (name === cookiePair[0]) { return decodeURIComponent(cookiePair[1]); } } return null; }
以上函數(shù)先將所有cookie分割成數(shù)組,然后遍歷整個(gè)數(shù)組,將每個(gè)cookie再分割成key-value形式,最后將所有cookie的key與指定的名稱對比,如果匹配則解碼對應(yīng)的value值后返回。
使用上面的函數(shù)找到存儲(chǔ)用戶登錄信息的cookie,并通過if語句來判斷是否存在。如果存在,就根據(jù)它獲取用戶的信息。以下是一個(gè)完整的例子:
function getCookie(name) { var cookieArr = document.cookie.split("; "); for (var i = 0; i < cookieArr.length; i++) { var cookiePair = cookieArr[i].split("="); if (name === cookiePair[0]) { return decodeURIComponent(cookiePair[1]); } } return null; } var userName = getCookie("username"); if(userName) { console.log("歡迎回來,"+userName+"!"); } else { console.log("請登錄"); }
通過以上代碼可以看出javascript讀取cookie非常簡單,只需要使用document.cookie屬性和解析函數(shù)即可。但需要注意的是,cookie有很多限制,例如IE瀏覽器的95個(gè)cookie限制和每個(gè)cookie的大小限制,開發(fā)者需要注意這些限制以便在使用時(shí)進(jìn)行避免。