cookie篇
cookie是客戶端本地存儲的一種方式,常見的客戶端本地存儲的方式還有:session storage、local storage和indexDB。cookie有兩種,一種儲存在瀏覽器進程中,另一種儲存在硬盤中。sessionId儲存在第一種cookie中,所以當瀏覽器關閉就等于銷毀了這個sessionId。
cookie的用途
cookie是一小段文本信息,伴隨著用戶請求在 Web 服務器和瀏覽器之間傳遞。cookie存儲在計算機本地中,可以跨越一個域名下的多個網頁,但不能跨越多個域名使用。保存用戶登錄信息、保存購物信息是cookie常見的用途。
cookie的原理
用戶每次訪問頁面瀏覽器都先搜索本地是否有與這個域名相關聯(lián)的cookie,有的話便添加到request header的Cookie字段中,與http請求一起發(fā)送到該站點。
cookie的內容
在瀏覽器開發(fā)者模式resource下可觀察cookie,其內容有:name/value、domain、Path、Expires/Max-age、httpOnly、Secure。各名值對之間需有分號+空格隔開。其中httpOnly屬性只能在服務器設置、httpOnly和secure是非名值對屬性。例子如下:
document.cookie = "test=myCookie; domain=.google.com.hk; expires=Sat, 04 Nov 2017 16:00:00 GMT; secure"
cookie的設置
可以從客戶端或者服務端設置cookie:
//客戶端:
document.cookie = "name=value[; expires=GMTDate][; domain=domain][; path=path][; secure]"
//服務端:
Set-Cookie: name=value[; expires=GMTDate][; domain=domain][; path=path][; secure][; HttpOnly]
每次設置不同的cookie名稱就是新增cookie,修改cookie時可以修改原cookie的expries、secure屬性,但不能修改domain、path屬性。修改cookie時domain、path必須與原cookie保持一致,不然就會新增cookie。將expries設為一個過去的時間或將max-age設為0可以刪除cookie。
cookie的缺點
安全性:由于cookie在HTTP中是明文傳遞的,其中包含的數(shù)據都可以被他人訪問,可能會被篡改、盜用。
- 大小限制:cookie的大小限制在4KB左右,若要做大量存儲顯然不是理想的選擇。
- 增加流量:cookie每次請求都會被自動添加到Request Header中,無形中增加了流量。cookie信息越大,對服務器請求的時間也越長。
session篇
在用戶訪問頁面時,服務器可以為每個用戶瀏覽器創(chuàng)建一個會話對象(session對象),并將sessionId保存到cookie上。注意:一個瀏覽器獨占一個session對象(默認情況下)。因此,在需要保存用戶數(shù)據時,服務器程序可以把用戶數(shù)據寫到用戶瀏覽器獨占的session中,當用戶使用瀏覽器訪問其它程序時,程序可以從用戶的session中取出該用戶的數(shù)據,為用戶服務。
session和cookie的區(qū)別
- cookie數(shù)據存放在客戶的瀏覽器上,session數(shù)據放在服務器上。
- cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙。
- session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能。
- cookie保存的數(shù)據不能超過4K,某些瀏覽器對cookie的名值對數(shù)量有限制。