基本概念:cookie是指web瀏覽器存儲的少量數據,該數據會在每次請求一個相關的URL時自動傳到服務器中。
以博客園為例,我們看看cookie有哪些屬性:
1、Name:cookie的名稱;
2、Value:cookie名稱對應的值;
3、Domain:設置cookie作用域。默認是當前web服務器的主機名。設置該屬性可使大型網站子域之間共享cookie,不過只能設置為當前服務器的域。
舉個栗子:order.example.com域下的服務器想讀取catalog/example.com域下設置的cookie,則將domain設為.example.com。
既然講到了cookie作用域,就多說一點,cookie作用域是通過文檔源和文檔路徑來確定的,默認作用域和創建它的頁面有關,對該頁面及該頁面同目錄或子目錄的其他頁面可見。
4、Path:設置cookie作用域。來自同一個服務器的頁面,只要其URL以指定的路徑前綴開始,都可以共享cookie。(注意該屬性不能用作訪問控制機制)
舉個栗子:http://www.test.com/catalog/widgets/index.html頁面創建了一個cookie,如果path屬性設置為/catalog,那么該cookie對於http://www.test.com/catalog/order.html可見;如果path屬性設置為/,那么該cookie對於http://www.test.com的服務器上的頁面都可見。
5、Expires/Max-Age:控制cookie的有效期。cookie默認的有效期只能持續在web瀏覽器的會話期間,一旦用戶關閉瀏覽器,cookie保存的數據就消失了,可以通過設置該屬性來延長cookie有效期,瀏覽器會將cookie數據存儲在一個文件中,到了有效期才會刪除它。
6、Size:cookie大小。每個cookie保存的數據(名字和值的總量)不能超過4KB。
7、HTTP
8、Secure:表明cookie值以何種形式通過網絡傳遞的布爾值。cookie默認以不安全的形式傳遞(即默認值為 false),一旦被標識為安全的,那就不能自動傳遞,只有瀏覽器和服務器通過HTTPS或其他安全協議連接時才傳遞。
了解基礎知識后,我們來實踐一下,對cookie進行讀寫。
將過期時間設為1天的示例:
function setCookie(key, val, options) { options = options || {}; var expires = options.expires; if (typeof (expires) === "number") { expires = new Date(); expires.setTime(expires.getTime() + options.expires); } document.cookie = key + "=" + escape(val) + (expires ? ";expires=" + expires.toGMTString() : "") + (options.path ? ";path=" + options.path : ";path=/") + (options.domain ? "; domain=" + options.domain : ""); }; setCookie('name','yun',{expires:1*24*60*60*1000});
獲取cookie值的示例:
function getCookie(key) { var a, reg = new RegExp("(^| )" + key + "=([^;]*)(;|$)"); if (a = document.cookie.match(reg)) { return unescape(a[2]); } else { return ""; } }; console.log(getCookie('name'));
參考資料:
1、Flanagan, D. javascript權威指南[M]. 北京:機械工業出版社, 2012. 586-592
http://www.cnblogs.com/lovelyun/p/5401248.html