cookie的內容主要包括:名字、值、過時時間、路徑和域。路徑與域一塊兒構成cookie的做用範圍。若不設置時間,則表示這個cookie的生命期爲瀏覽器會話期間,關閉瀏覽器窗口,cookie就會消失。這種生命期爲瀏覽器會話期的cookie被稱爲會話cookie。
會話cookie通常不存儲在硬盤而是保存在內存裏,固然這個行爲並非規範規定的。若設置了過時時間,瀏覽器就會把cookie保存到硬盤上,關閉後再打開瀏覽器這些cookie仍然有效直到超過設定的過時時間。對於保存在內存裏的cookie,不一樣的瀏覽器有不一樣的處理方式session機制。
當程序須要爲某個客戶端的請求建立一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識(稱爲session id),若是已包含則說明之前已經爲此客戶端建立過session,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),若是客戶端請求不包含session id,則爲客戶端建立一個session而且生成一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。保存這個session id的方式能夠採用cookie,這樣在交互過程當中瀏覽器能夠自動的按照規則把這個標識發送給服務器。前端
一、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上
二、cookie不是很安全,別人能夠分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用session
三、session會在必定時間內保存在服務器上,當訪問增多,會比較佔用你服務器的性能,考慮到減輕服務器性能方面,應當使用cookie
四、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie
五、建議將登陸信息等重要信息存放爲session,其餘信息若是須要保留,能夠放在cookie中
六、session保存在服務器,客戶端不知道其中的信息;cookie保存在客戶端,服務器可以知道其中的信息
七、session中保存的是對象,cookie中保存的是字符串
八、session不能區分路徑,同一個用戶在訪問一個網站期間,全部的session在任何一個地方均可以訪問到,而cookie中若是設置了路徑參數,那麼同一個網站中不一樣路徑下的cookie互相是訪問不到的web
Web Storage的概念和cookie類似,區別是它是爲了更大容量存儲設計的,cookie的大小是受限的,而且每次請求一個新的頁面的時候cookie都會被髮送過去,這樣無形中浪費了帶寬,另外cookie還須要指定做用域,不可跨域調用。
除此以外,web storage擁有setItem,getItem,removeItem,clear等方法,不像cookie須要前端開發者本身封裝setCookie,getCookie。
可是cookie也是不可或缺的,cookie的做用是與服務器進行交互,做爲http規範的一部分而存在的,而web Storage僅僅是爲了在本地「存儲」數據而生
sessionStorage、localStorage、cookie都是在瀏覽器端存儲的數據,其中sessionStorage的概念很特別,引入了一個「瀏覽器窗口」的概念,sessionStorage是在同源的同學口中,始終存在的數據,也就是說只要這個瀏覽器窗口沒有關閉,即便刷新頁面或進入同源另外一個頁面,數據仍然存在,關閉窗口後,sessionStorage就會被銷燬,同時「獨立」打開的不一樣窗口,即便是同一頁面,sessionStorage對象也是不一樣的數據庫
Web Storage帶來的好處:
一、減小網絡流量:一旦數據保存在本地以後,就能夠避免再向服務器請求數據,所以減小沒必要要的數據請求,減小數api
據在瀏覽器和服務器間沒必要要的來回傳遞
二、快速顯示數據:性能好,從本地讀數據比經過網絡從服務器上得到數據快得多,本地數據能夠及時得到,再加上網跨域
頁自己也能夠有緩存,所以整個頁面和數據都在本地的話,能夠當即顯示
三、臨時存儲:不少時候數據只須要在用戶瀏覽一組頁面期間使用,關閉窗口後數據就能夠丟棄了,這種狀況使用sessionStorage很是方便瀏覽器
其實數據既能夠在瀏覽器本地存儲,也能夠在服務器端存儲
瀏覽器能夠保存一些數據,須要的時候直接從本地存取,sessionStorage、localStorage和cookie都是由瀏覽器存儲在本地的數據
服務器端也能夠保存全部用戶的全部數據,但須要的時候瀏覽器要向服務器請求數據。
一、服務器端能夠保存用戶的持久數據,如數據庫和雲存儲將用戶的大量數據保存在服務器端
二、服務器端也能夠保存用戶的臨時會話數據,服務器端的session機制,如jsp的session對象,數據保存在服務器上,緩存
實際上,服務器和瀏覽器之間僅需傳遞session id便可,服務器根據session id找到對應用戶的session對象,會話數據僅在一段時間內有效,這個時間就是server端設置的session有效期安全
服務器端保存全部的用戶的數據,因此服務器端的開銷較大,而瀏覽器端保存則把不一樣用戶須要的數據分別保存在用戶各自的瀏覽器中,瀏覽器端通常只用來存儲小數據,而非服務能夠存儲大數據或小數據服務器存儲數據安全一些,瀏覽器只適合存儲通常數據服務器
共同點:都是保存在瀏覽器端、且同源的
區別:
一、cookie數據始終在同源的http請求中攜帶(即便不須要),即cookie在瀏覽器和服務器間來回傳遞,而sessionStorage和localStorage不會自動把數據發送給服務器,僅在本地保存。cookie數據還有路徑(path)的概念,能夠限制cookie只屬於某個路徑下
二、存儲大小限制也不一樣,cookie數據不能超過4K,同時由於每次http請求都會攜帶cookie、因此cookie只適合保存很小的數據,如會話標識。sessionStorage和localStorage雖然也有存儲大小的限制,但比cookie大得多,能夠達到5M或更大
三、數據有效期不一樣,sessionStorage:僅在當前瀏覽器窗口關閉以前有效;localStorage:始終有效,窗口或瀏覽器關閉也一直保存,所以用做持久數據;cookie:只在設置的cookie過時時間以前有效,即便窗口關閉或瀏覽器關閉
四、做用域不一樣,sessionStorage不在不一樣的瀏覽器窗口中共享,即便是同一個頁面;localstorage在全部同源窗口中都是共享的;cookie也是在全部同源窗口中都是共享的
五、web Storage支持事件通知機制,能夠將數據更新的通知發送給監聽者
六、web Storage的api接口使用更方便cookie
頁面中通常的js對象的生存期僅在當前頁面有效,所以刷新頁面或轉到另外一頁面這樣的從新加載頁面的狀況,數據就不存在了 而sessionStorage只要同源的同學口中,刷新頁面或進入同源的不一樣頁面,數據始終存在,也就是說只要瀏覽器不關閉,數據仍然存在