搜尋
首頁web前端js教程在JavaScript中讀寫cookie程式碼

在JavaScript中讀寫cookie程式碼

Nov 28, 2016 pm 01:27 PM
javascript

在JavaScript中處理cookie有些複雜,因為其眾所周知的蹩腳的接口,即BOM的doucment.cookie屬性。這個屬性的獨特之處在於它會因為使用它的方式不同而表現出不同的行為。當用來取得屬性值時,document.cookie傳回目前頁面可用的(根據cookie的網域、路徑、失效時間和安全設定)所有cookie的字串,一系列分號隔開的名-值對,如下例所示:

 

  

name1=value1;name2=value2;name3=value3;

1   所有名字和值都是經過URLURLLdecodeURIUent)來編碼所有名稱的

  當用於設定的時候,document.cookie屬性可以設定為一個新的cookie字串。這個cookie字串會被解釋並加入到現有的 cookie集合中。設定document.cookie並不會覆蓋cookie除非設定的cookie的名稱已經存在。設定cookie的格式如下,和set-Cookie頭中使用的一樣的格式:

  

name=value; expires=expiration_time; path=domian_path; domian=domain_nam

 必須的。以下是一個簡單的例子:

  

document.cookie = "name=Nicholas";

  這段程式碼建立了一個叫做name的cookie,值為Nicholas。當客戶端每次向伺服器端發送請求的時候,都會發送這個cookie;當瀏覽器關閉的時候,它就會被刪除。雖然這段程式碼沒問題,但因為這裡剛好名稱和值都不需要進行編碼,所以最好每次設定cookie時都像下面這個範例一樣使用

  

encodeURIComponent();

  唯一.M.codeURIComponent();

  唯一.S. ("name") + "=" + encodeURIComponent("Nicholas");

  要給被建立的cookie指定額外的信息,只要將參數追加到該字串,和Set-Cookie頭中的格式一樣,如下:

  

document.cookie = encodeURIComponent("name") + "=" + encodeURIComponent("Nicholas") + "; domain=.wrox.com; path=/";讀寫cookie不是非常直觀,我們常寫一些函數來簡化cookie的功能。基本的cookie操作有三種:讀取、寫入和刪除。它們在CookieUtil物件中如下表示:

var CookieUtil = {
    get: function (name) {
        var cookieName = encodeURIComponent(name) + "=",
            cookieStart = document.cookie.indexOf(cookieName),
            cookieValue = null;
        if (cookieStart > -1) {
            var cookieEnd = document.cookie.indexOf(";", cookieStart)
            if (cookieEnd == -1) {
                cookieEnd = document.cookie.length;
            }
            cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
        }
        return cookieValue;
    },
    set: function (name, value, expires, path, domain, secure) {
        var cookieText = encodeURIComponent(name) + "=" + encodeURIComponent(value);
        if (expires instanceof Date) {
            cookieText += "; expires=" + expires.toGMTString();
        }
        if (path) {
            cookieText += "; path=" + path;
        }
        if (domain) {
            cookieText += "; domain=" + domain;
        }
        if (secure) {
            cookieText += "; secure";
        }
        document.cookie = cookieText;
    },
    unset: function (name, path, domain, secure) {
        this.set(name, "", new Date(0), path, domain, secure);
    }
};

CookieUtil.get()方法根據cookie的名字取得對應的值。他是透過在document.cookie字串中尋找cookie名加上等於號的位置。如果找到了,那麼使用indexOf()來找出該位置之後的第一個分號(表示了該cookie的結束位置)。如果沒有找到分號,則表示該 cookie是字串中的最後一個,則網域下的字串都是cookie的值。該值使用decodeURIComponent()進行解碼並最後回傳。如果沒有發現Cookie,則傳回null。
CookieUtil.set()方法在頁面上設定了一個cookie,接受幾個參數:cookie的名稱,cookie的值,可選的用於指定cookie何時應該被刪除的Date對象,cookie的可選的URL路徑,可選的域,以及可選的表示是否要新增secure標誌的Boolean值。參數是按照它們使用頻率的多寡來排列的,只有前兩個是必須的。在這個方法中,名稱和值都使用encodeURIComponent()進行了URL編碼,並檢查其它選項。如果expires參數是Date對象,那麼就會使用Date對象的toGMTString()方法正確格式化Date對象,並加入到 expires選項上。方法的其它部分是建構cookie字串並將其設定到document.cookie中。
沒有刪除現存cookie的直接方法。所以,需要使用相同的路徑、網域和安全選項再次設定cookie,並將失效時間設定為過去的時間。 CookieUtil.unset()方法可以處理這種事情。它接受4個參數:要刪除的cookie的名稱,可選的路徑參數,可選的域參數以及可選的安全參數。這些參數加上空字串並設定失效時間為1970年1月1日(初始化為0ms的Date物件的值),傳給CookieUtil.set()。這樣就能確保cookie被刪除。

這些方法可以如下使用:

//设置cookie
CookieUtil.set("name", "Nicholas");
CookieUtil.set("book", "Professional <a href="http://www.php1.cn/">JavaScript</a>");
//读值
alert(CookieUtil.get("name"));
alert(CookieUtil.get("book"));
//删除cookie
CookieUtil.unset("name");
CookieUtil.unset("book")
//设置1个cookie,包括它的路径、域、截止日期
CookieUtil.set("name", "Nicholas", "/books/projs/", "www.wrox.com", new Date("January 1, 2010"));
//删除同一cookie
CookieUtil.unset("name", "/books/projs/", "www.wrox.com");
//设置1个<a href="http://www.php1.cn/category/23.html">安全</a>cookie
CookieUtil.set("name", "Nicholas", null, null, null, true);

這些方法透過處理解析、建構cookie字串的任務令在客戶端利用cookie儲存資料更加簡單

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python vs. JavaScript:社區,圖書館和資源Python vs. JavaScript:社區,圖書館和資源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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