1. 程式人生 > 其它 >Cookie、session和localStorage、以及sessionStorage之間的區別

Cookie、session和localStorage、以及sessionStorage之間的區別

Cookie、session和localStorage、以及sessionStorage之間的區別

一、Cookie、session和localStorage的區別
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的區別:
*1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上
2、cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮*到安全應當使用session
3、session會在一定時間內儲存在伺服器上,當訪問增多,會比較佔用你伺服器的效能,考慮到減輕伺服器效能方面,應當使用cookie
4、單個cookie儲存的數*據不能超過4K,很多瀏覽器都限制一個站點最多儲存20個cookie
5、建議將登入資訊等重要資訊存放為session,其他資訊如果需要保留,可以放在cookie中
6、session儲存在伺服器,客戶端不知道其中的信心;cookie儲存在客戶端,伺服器能夠知道其中的資訊
7、session中儲存的是物件,cookie中儲存的是字串
8、session不能區分路徑,同一個使用者在訪問一個網站期間,所有的session在任何一個地方都可以訪問到,而cookie中如果設定了路徑引數,那麼同一個網站中不同路徑下的cookie互相是訪問不到的*

三、web Storage和Cookie的區別
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帶來的好處:
1、減少網路流量:一旦資料儲存在本地之後,就可以避免再向伺服器請求資料,因此減少不必要的資料請求,減少數

據在瀏覽器和伺服器間不必要的來回傳遞
2、快速顯示資料:效能好,從本地讀資料比通過網路從伺服器上獲得資料快得多,本地資料可以及時獲得,再加上網

頁本身也可以有快取,因此整個頁面和資料都在本地的話,可以立即顯示
3、臨時儲存:很多時候資料只需要在使用者瀏覽一組頁面期間使用,關閉視窗後資料就可以丟棄了,這種情況使用sessionStorage非常方便

四、瀏覽器本地儲存與伺服器端儲存的區別
其實資料既可以在瀏覽器本地儲存,也可以在伺服器端儲存
瀏覽器可以儲存一些資料,需要的時候直接從本地存取,sessionStorage、localStorage和cookie都是由瀏覽器儲存在本地的資料
伺服器端也可以儲存所有使用者的所有資料,但需要的時候瀏覽器要向伺服器請求資料。
1、伺服器端可以儲存使用者的持久資料,如資料庫和雲端儲存將使用者的大量資料儲存在伺服器端
2、伺服器端也可以儲存使用者的臨時會話資料,伺服器端的session機制,如jsp的session物件,資料儲存在伺服器上,

實際上,伺服器和瀏覽器之間僅需傳遞session id即可,伺服器根據session id找到對應使用者的session物件,會話資料僅在一段時間內有效,這個時間就是server端設定的session有效期

伺服器端儲存所有的使用者的資料,所以伺服器端的開銷較大,而瀏覽器端儲存則把不同使用者需要的資料分別儲存在使用者各自的瀏覽器中,瀏覽器端一般只用來儲存小資料,而非服務可以儲存大資料或小資料伺服器儲存資料安全一些,瀏覽器只適合儲存一般資料

五、sessionStorage、localStorage和cookie的區別
共同點:都是儲存在瀏覽器端、且同源的
區別:
1、cookie資料始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和伺服器間來回傳遞,而sessionStorage和localStorage不會自動把資料傳送給伺服器,僅在本地儲存。cookie資料還有路徑(path)的概念,可以限制cookie只屬於某個路徑下
2、儲存大小限制也不同,cookie資料不能超過4K,同時因為每次http請求都會攜帶cookie、所以cookie只適合儲存很小的資料,如會話標識。sessionStorage和localStorage雖然也有儲存大小的限制,但比cookie大得多,可以達到5M或更大
3、資料有效期不同,sessionStorage:僅在當前瀏覽器視窗關閉之前有效;localStorage:始終有效,視窗或瀏覽器關閉也一直儲存,因此用作持久資料;cookie:只在設定的cookie過期時間之前有效,即使視窗關閉或瀏覽器關閉
4、作用域不同,sessionStorage不在不同的瀏覽器視窗中共享,即使是同一個頁面;localstorage在所有同源視窗中都是共享的;cookie也是在所有同源視窗中都是共享的
5、web Storage支援事件通知機制,可以將資料更新的通知傳送給監聽者
6、web Storage的api介面使用更方便

六、sessionStorage與頁面js資料物件的區別
頁面中一般的js物件的生存期僅在當前頁面有效,因此重新整理頁面或轉到另一頁面這樣的重新載入頁面的情況,資料就不存在了
而sessionStorage只要同源的同窗口中,重新整理頁面或進入同源的不同頁面,資料始終存在,也就是說只要瀏覽器不關閉,資料仍然存在