cookie篇
cookie是客戶端本地存儲的一種方式,常見的客戶端本地存儲的方式還有:session storage、local storage和indexDB。cookie有兩種,一種儲存在瀏覽器進程中,另一種儲存在硬盤中。sessionId儲存在第一種cookie中,所以當瀏覽器關閉就等于銷毀了這個sessionId。
cookie的用途
cookie是一小段文本信息,伴隨著用戶請求在 Web 服務器和瀏覽器之間傳遞。cookie存儲在計算機本地中,可以跨越一個域名下的多個網頁,但不能跨越多個域名使用。保存用戶登錄信息、保存購物信息是cookie常見的用途。
cookie的原理
用戶每次訪問頁面瀏覽器都先搜索本地是否有與這個域名相關聯的cookie,有的話便添加到request header的Cookie字段中,與http請求一起發送到該站點。
cookie的內容
在瀏覽器開發者模式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中是明文傳遞的,其中包含的數據都可以被他人訪問,可能會被篡改、盜用。
- 大小限制:cookie的大小限制在4KB左右,若要做大量存儲顯然不是理想的選擇。
- 增加流量:cookie每次請求都會被自動添加到Request Header中,無形中增加了流量。cookie信息越大,對服務器請求的時間也越長。
session篇
在用戶訪問頁面時,服務器可以為每個用戶瀏覽器創建一個會話對象(session對象),并將sessionId保存到cookie上。注意:一個瀏覽器獨占一個session對象(默認情況下)。因此,在需要保存用戶數據時,服務器程序可以把用戶數據寫到用戶瀏覽器獨占的session中,當用戶使用瀏覽器訪問其它程序時,程序可以從用戶的session中取出該用戶的數據,為用戶服務。
session和cookie的區別
- cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
- cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙。
- session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能。
- cookie保存的數據不能超過4K,某些瀏覽器對cookie的名值對數量有限制。