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


原文鏈接:https://www.cnblogs.com/lishiyuan/p/10273991.html

一、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只要同源的同窗口中,刷新頁面或進入同源的不同頁面,數據始終存在,也就是說只要瀏覽器不關閉,數據仍然存在

 
好文要頂  關注我  收藏該文   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM