首頁 web前端 js教程 JavaScript中的document.cookie的使用

JavaScript中的document.cookie的使用

Nov 26, 2016 pm 01:27 PM
javascript

  我們已經知道,在 document 物件中有一個 cookie 屬性。但 Cookie 又是什麼? 「某些 Web 網站在您的硬碟上用很小的文字檔案儲存了一些訊息,這些檔案就稱為 Cookie。」— MSIE 說明。一般來說,Cookies 是 CGI 或類似,比 HTML 高級的文件、程式等創建的,但是 javascript 也提供了對 Cookies 的很​​全面的存取權利。

    我們要先學習 Cookie 的基本知識。

    每個Cookie 都是這樣的:=

的限制與javascript 的命名限制大同小異,少了“不能用javascript 關鍵字”,多了“只能用可以用可以用在URL 編碼中的字元」。後者比較難懂,但是只要你只用字母和數字命名,就完全沒有問題了。 的要求也是「只能用可以用在 URL 編碼中的字元」。

    每個 Cookie 都有失效日期,一旦電腦的時鐘過了失效日期,這個 Cookie 就會被刪除。我們不能直接刪除一個 Cookie,但可以用設定失效日期早於現在時刻的方法來間接刪除它。

  每個網頁,或者說每個站點,都有它自己的Cookies,這些Cookies 只能由這個站點下的網頁來訪問,來自其他站點或同一站點下未經授權的區域的網頁,是不能訪問的。每一「組」Cookies 有規定的總大小(約 2KB 每「組」),一超過最大總大小,則最早失效的 Cookie 先被刪除,來讓新的 Cookie「安家」。

    現在我們來學習使用 documents.cookie 屬性。

    如果直接使用documents.cookie 屬性,或者說,用某種方法,例如給變數賦值,來獲得documents.cookie 的值,我們就可以知道在現在的文檔中有多少個Cookies,每個Cookies 的名字,和它的值。例如,在某文件中加入“document.write(documents.cookie)”,結果顯示:

    name=kevin; email=kevin@kevin.com; lastvisited=index.html

 Cookies:name, email 和lastvisited,它們的數值分別是kevin, kevin@kevin.com 和index.html。可以看到,兩個Cookies 之間是用分號和空格隔開的,所以我們可以用cookieString.split('; ') 方法得到每個Cookie 分開的一個陣列(先用var cookieString = documents.cookie) 。

    設定一個 Cookie 的方法是對 documents.cookie 賦值。與其它情況下的賦值不同,向 documents.cookie 賦值不會刪除掉原有的 Cookies,只會增添 Cookies 或更改原有 Cookie。賦值的格式:

    documents.cookie = 'cookieName=' + escape('cookievalue') + ';expires=' + expirationDateObj.toGMTString();

   cookieName 表示 Cookie 的名稱,cookievalue 表示 Cookie 的值,expirationDateObj 表示儲存失效日期的日期物件名,如果不需要指定失效日期,則不需要第二行。不指定失效日期,則瀏覽器預設是在關閉瀏覽器(也就是關閉所有視窗)之後過期。

    首先 escape() 方法:為什麼一定要用?因為 Cookie 的值的要求是「只能用可以用在 URL 編碼中的字元」。我們知道「escape()」方法是把字串按URL 編碼方法來編碼的,那我們只需要用一個「escape()」方法來處理輸出到Cookie 的值,用「unescape()」來處理從Cookie接收過來的數值就萬無一失了。而這兩種方法最常的用途就是處理 Cookies。其實設定一個 Cookie 只是「documents.cookie = 'cookieName=cookievalue'」這麼簡單,但為了避免在 cookievalue 中出現 URL 不准出現的字符,還是用一個 escape() 好。

    然後「expires」前面的分號:注意到就行了。是分號而不是其他。

   
    最後 toGMTString() 方法:設定 Cookie 的時效日期都是用 GMT 格式的時間的,其它格式的時間是沒有作用的。

    現在我們來實戰一下。設定一個「name=rose」的 Cookie,在 3 個月後過期。

var expires = new Date();

expires.setTime(expires.getTime() + 3 * 30 * 24 * 60 * 60 * 1000);
/* 三個月x 一個月當作30 天x 一天24小時
x 一小時60 分x 一分60 秒x 一秒1000 毫秒*/
documents.cookie = 'name=rose;expires=' + expires.toGMTString();

    為什麼沒有用escape() 方法?這是因為我們知道 rose 是一個合法的 URL 編碼字串,也就是說,'rose' == escape('rose')。一般來說,如果設定 Cookie 時不用 escape(),那麼取得 Cookie 時也不用 unescape()。

  再來一次:寫一個函數,作用是找出指定 Cookie 的值。

function getCookie(cookieName) {
var cookieString = documents.cookie;
var start = cookieString.indexOf(cookieName + '=');
// 加上等號的原因是避免在某些Cookie 的值裡有
// 與cookieName 一樣的字串。
if (start == -1) // 找不到
return null;
start += cookieName.length + 1;
var end = cookieString.indexOf(';', start);
if (end == - 1) return unescape(cookieString.substring(start));
return unescape(cookieString.substring(start, end));
}

    這個函數用到了字串物件的一些方法,如果你不記得了(你是不是這般沒記性啊),請快去查查。這個函數所有的 if 語句都沒有帶 else,這是因為如果條件成立,程式運行的都是 return 語句,在函數裡碰上 return,就會終止運行,所以不加 else 也沒問題。函數在找到 Cookie 時,就會傳回 Cookie 的值,否則傳回「null」。

    現在我們要刪除剛才設定的 name=rose Cookie。

var expires = new Date();
expires.setTime(expires.getTime() - 1);
documents.cookie = 'name=rose;expires=' + expires.toGMTString();🠎🠎只要將失效日期改成比現在日期早一點(這裡是早1 毫秒),再用同樣的方法設定Cookie,就可以刪除Cookie 了。

    附一個老外寫的js操作cookie的函數

 


///設定cookie

function setCookie(NameOfCookie, value, expire, g的cookie:
//cookie的名稱,儲存的Cookie值,
// 以及Cookie過期的時間.
// 這幾行是把天數轉換為合法的日期

var ExpireDate = new Date ();

ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000));

// 下這行是用來儲存cookie的,只需簡單的為"document.cookie"賦值即可
// 注意日期透過toGMTstring()函數被轉換成了GMT時間。

document.cookie = NameOfCookie + "=" + escape(value) +

  ((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString());

}
/取得cookie值
function getCookie(NameOfCookie)
{

// 首先我們檢查下cookie是否存在.
// 若不存在則document.cookie的長度為0
if (document.cookie.length > 0)
{

// 接著我們檢查下cookie的名字是否存在於document.cookie
// 因為不只一個cookie值儲存,所以即使document.cookie的長度不為0也不能保證我們想要的名字的cookie存在
//所以我們需要這一步驟看看是否有我們想要的cookie
//如果begin的變數值得到的是-1那麼說明不存在
begin = document.cookie.indexOf(NameOfCookie+"=");
if (begin != -1)  
{
// 說明存在我們的cookie.
begin += NameOfCookie.length+1;//cookie值的初始位置
end = document.cookie.indexOf("", begin);", begin) ;//結束位置
if (end == -1) end = document.cookie.length;//沒有;則end為字串結束位置
return unescape(document.cookie.substring(begin, end)); }
}
 
return null;

// cookie不存在返回null
}

 
///刪除cookie
function delCookie (NameOfCookie)
{
/認為過期時間調到過去的時間;
//剩下就交給操作系統適當時間清理cookie啦

 

if (getCookie(NameOfCookie)) {www.2cto.com
document.cookie = NameOfCookie + "=" +
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
}
}



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

javascript如何使用insertBefore javascript如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript與WebSocket:打造高效率的即時影像處理系統 JavaScript與WebSocket:打造高效率的即時影像處理系統 Dec 17, 2023 am 08:41 AM

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數

See all articles