前言
前些天在面試合合資訊科技的實習生時,筆試時遇到cookie和session的對比,今天來個全面總結。
cookie
Cookie是訪問某些網站以後在本地儲存的一些網站相關的資訊,下次再訪問的時候減少一些步驟。
Cookie中一般包括如下主要內容:
- key:設定的cookie的key。
- value:key對應的value。
- max_age/expire_time:設定cookie的過期時間。
- domain:該cookie在哪個域名中有效。一般設定子域名,比如cms.example.com。
- path:該cookie在哪個路徑下有效。
例如,我們登入某一個網站時需要輸入使用者名稱及密碼,如果使用者名稱和密碼儲存為cookie,則下次我們登入該網站的時候就不需要再輸入使用者密碼了。
session
session是存在伺服器的一種用來存放使用者資料的類HashTable結構。
瀏覽器第一次傳送請求時,伺服器自動生成了一HashTable和一SessionID來唯一標識這個HashTable,並將其通過響應傳送到瀏覽器。瀏覽器第二次傳送請求會將前一次伺服器響應中的SessionID放在請求中一併傳送到伺服器上,伺服器從請求中提取出Session ID,並和儲存的所有Session ID進行對比,找到這個使用者對應的HashTable。
例如,我們瀏覽一個購物網站,使用者將部分商品新增到購物車中,許久以前許多網站都是用服務端session儲存購物車內容(現在基本都是用資料庫了),就用到了session儲存這部分資訊。
區別
1.儲存位置不同
cookie的資料資訊存放在本地。
session的資料資訊存放在伺服器上。
2.儲存容量大小不同
cookie儲存的容量較小,一般<=4KB。
session儲存容量大小沒有限制(但是為了伺服器效能考慮,一般不能存放太多資料)。
3.儲存有效期不同
cookie可以長期儲存,只要不超過設定的過期時間,可以一直儲存。
session在超過一定的操作時間(通常為30分鐘)後會失效,但是當關閉瀏覽器時,為了保護使用者資訊,會自動呼叫session.invalidate()方法,該方法會清除掉session中的資訊。
4.安全性不同
cookie儲存在客戶端,所以可以分析存放在本地的cookie並進行cookie欺騙,安全性較低。
session儲存在伺服器上,不存在敏感資訊洩漏的風險,安全性較高。
5.域支援範圍不同
cookie支援跨域名訪問。例如,所有a.com的cookie在a.com下都能用。
session不支援跨域名訪問。例如,www.a.com的session在api.a.com下不能用。
6.對伺服器壓力不同
cookie儲存在客戶端,不佔用伺服器資源。
session是儲存在伺服器端,每個使用者都會產生一個session,session過多的時候會消耗伺服器資源,所以大型網站會有專門的session伺服器。
7.儲存的資料型別不同
cookie中只能保管ASCII字串,並需要通過編碼方式儲存為Unicode字元或者二進位制資料。
session中能夠儲存任何型別的資料,包括且不限於string,integer,list,map等。