基本概念:cookie是指web瀏覽器存儲的少許數據,該數據會在每次請求一個相關的URL時自動傳到服務器中。javascript
以博客園爲例,咱們看看cookie有哪些屬性:html
一、Name:cookie的名稱;java
二、Value:cookie名稱對應的值;web
三、Domain:設置cookie做用域。默認是當前web服務器的主機名。設置該屬性可以使大型網站子域之間共享cookie,不過只能設置爲當前服務器的域。瀏覽器
舉個栗子:order.example.com域下的服務器想讀取catalog/example.com域下設置的cookie,則將domain設爲.example.com。安全
既然講到了cookie做用域,就多說一點,cookie做用域是經過文檔源和文檔路徑來肯定的,默認做用域和建立它的頁面有關,對該頁面及該頁面同目錄或子目錄的其餘頁面可見。服務器
四、Path:設置cookie做用域。來自同一個服務器的頁面,只要其URL以指定的路徑前綴開始,均可以共享cookie。(注意該屬性不能用做訪問控制機制)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的服務器上的頁面均可見。網絡
五、Expires/Max-Age:控制cookie的有效期。cookie默認的有效期只能持續在web瀏覽器的會話期間,一旦用戶關閉瀏覽器,cookie保存的數據就消失了,能夠經過設置該屬性來延長cookie有效期,瀏覽器會將cookie數據存儲在一個文件中,到了有效期纔會刪除它。dom
六、Size:cookie大小。每一個cookie保存的數據(名字和值的總量)不能超過4KB。
七、HTTP
八、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'));
參考資料:
一、Flanagan, D. javascript權威指南[M]. 北京:機械工業出版社, 2012. 586-592