淺析cookie

  基本概念: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

相關文章
相關標籤/搜索