cookies之事一二三

cookies

HTTP cookies,通常簡稱爲cookies,起初是用來在客戶端的會話信息。服務端的響應會在HTTP header中通過Set-Cookie加入會話信息:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Other-header: other-header-value

另外,瀏覽器會存儲該會話信息,並且每次請求時會通過HTTP header帶上這個cookie信息:

GET /index.html HTTP/1.1
Cookie: name=value
Other-header: other-header-value

服務端可以通過cookie中的信息識別請求是來自哪個客戶端,這樣就爲web瀏覽器提供一種身份識別機制。

cookie的限制

cooke是跟着域名的,存儲在這個域名下的cooke,另外一個域名的網站不能訪問
服務器響應時會在頭部加上cookie,客戶端接受到了響應就在本地創建了cookie,每次請求都會帶着這個cookie(cookie是從哪個域名帶過來的,就會隨着請求發送到指定域名的服務器)
各個瀏覽器對單個域名下cookie個數的限制20~50個不等
單個cooke的存儲空間也有限制,不能超過4096個字節,大概4Kb的空間

cookie的組成部分:

name、value、domain、path、expiration、secure flag
eg:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: **name=value; expires=Mon, 22-Jan-07 07:10:24; **
GMT; domain=.wrox.com;path=/; secure
Other-header: other-header-value

  • domian指示這個cookie隨哪個域名發送到服務器(比如這裏的.wrox.com表示既可以隨着 www.wrox.com發送,也可以隨着p2p.wrox.com發送)
  • path表示可以訪問cookie的域名路徑,比如你可以指定path爲: http://www.wrox.com/books,那麼 http://www.wrox.com這個域名就不會發送cookie信息
  • expiration表示cookie的到期時間,可以讓在瀏覽器關閉後,cookie仍然留在客戶端機器了一段時間
  • secure flag 如何加了最後的secure標誌,表示cookie信息只在有 SSL連接時才發送,比如 https://www.wrox.com能發送cookie信息,而 http://www.wrox.com就不能發送

這些組成部分指示了什麼時候哪個域名下的cookie要隨着請求發送到服務器

JS中對cookie的操作

JS中通過 document.cookie對cookie進行讀取,寫入,和刪除

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);
    }
};

注意

  1. cookie中的數據並不安全,能被他們截獲,要避免存儲一些重要敏感的信息
  2. 由於每次請求cookie都會作爲請求頭髮送,cookie中數據量越大,越影響性能,所以建議cookie裏存儲少量信息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章