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);
}
};
注意
- cookie中的數據並不安全,能被他們截獲,要避免存儲一些重要敏感的信息
- 由於每次請求cookie都會作爲請求頭髮送,cookie中數據量越大,越影響性能,所以建議cookie裏存儲少量信息。