cookie 、 session 和 localStorage的區別

1、cookie詳解程序員

(1)簡介web

由於HTTP協議是無狀態的,即服務器不知道用戶上一次作了什麼,這嚴重阻礙了交互式Web應用程序的實現。在典型的網上購物場景中,用戶瀏覽了幾個頁面,買了一盒餅乾和兩飲料。最後結賬時,因爲HTTP的無狀態性,不經過額外的手段,服務器並不知道用戶到底買了什麼。爲了作到這點,就須要使用到Cookie了。服務器能夠設置或讀取Cookies中包含信息,藉此維護用戶跟服務器會話中的狀態。數據庫

Cookie(複數形態:Cookies),是指某些網站爲了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(一般通過加密)。跨域

Cookie是由服務端生成的,發送給客戶端(一般是瀏覽器)的。Cookie老是保存在客戶端中,按在客戶端中的存儲位置,可分爲會話Cookie和持久Cookie:瀏覽器

內存Cookie由瀏覽器維護,保存在內存中,瀏覽器關閉後就消失了,其存在時間是短暫的。 硬盤Cookie保存在硬盤裏,有一個過時時間,除非用戶手工清理或到了過時時間,硬盤Cookie不會被刪除,其存在時間是長期的。因此,按存在時間,可分爲非持久Cookie和持久Cookie。緩存

(2)做用安全

Cookie的根本做用就是在客戶端存儲用戶訪問網站的一些信息。典型的應用有:服務器

記住密碼,下次自動登陸。 購物車功能。 記錄用戶瀏覽數據,進行商品(廣告)推薦。cookie

(3)缺陷 ①Cookie會被附加在每一個HTTP請求中,因此無形中增長了流量。 ②因爲在HTTP請求中的Cookie是明文傳遞的,因此安全性成問題。(除非用HTTPS) ③Cookie的大小限制在4KB左右。對於複雜的存儲需求來講是不夠用的。網絡

2、Session詳解

(1)簡介 Session表明服務器與瀏覽器的一次會話過程,這個過程是連續的,也能夠時斷時續的。Session是一種服務器端的機制,Session 對象用來存儲特定用戶會話所需的信息。 Session由服務端生成,保存在服務器的內存、緩存、硬盤或數據庫中。

(2)工做原理 當用戶訪問到一個服務器,若是服務器啓用Session,服務器就要爲該用戶建立一個SESSION,在建立這個SESSION的時候,服務器首先檢查這個用戶發來的請求裏是否包含了一個SESSION ID,若是包含了一個SESSION ID則說明以前該用戶已經登錄過併爲此用戶建立過SESSION,那服務器就按照這個SESSION ID把這個SESSION在服務器的內存中查找出來(若是查找不到,就有可能爲他新建立一個),若是客戶端請求裏不包含有SESSION ID,則爲該客戶端建立一個SESSION並生成一個與此SESSION相關的SESSION ID。這個SESSION ID是惟一的、不重複的、不容易找到規律的字符串,這個SESSION ID將被在本次響應中返回到客戶端保存,而保存這個SESSION ID的正是COOKIE,這樣在交互過程當中瀏覽器能夠自動的按照規則把這個標識發送給服務器。

(3)做用 Session的根本做用就是在服務端存儲用戶和服務器會話的一些信息。典型的應用有:

判斷用戶是否登陸。 購物車功能。

3、Cookie和Session的區別

一、存放位置不一樣: Cookie保存在客戶端,Session保存在服務端。

2 、存取方式的不一樣: Cookie中保存的是字符串,Session保存的是對象

三、安全性(隱私策略)的不一樣 : Cookie存儲在瀏覽器中,對客戶端是可見的,客戶端的一些程序可能會窺探、複製以致修正Cookie中的內容。而Session存儲在服務器上,對客戶端是透明的,不存在敏感信息泄露的風險。 假如選用Cookie,比較好的方法是,敏感的信息如帳號密碼等儘可能不要寫到Cookie中。最好是像Google、Baidu那樣將Cookie信息加密,提交到服務器後再進行解密,保證Cookie中的信息只要本人能讀得懂。而假如選擇Session就省事多了,反正是放在服務器上,Session裏任何隱私都可以有效的保護。

四、有效期上的不一樣: 只須要設置Cookie的過時時間屬性爲一個很大很大的數字,Cookie就能夠在瀏覽器保存很長時間。 因爲Session依賴於名爲JSESSIONID的Cookie,而Cookie JSESSIONID的過時時間默許爲–1,只需關閉了瀏覽器(一次會話結束),該Session就會失效。

五、對服務器形成的壓力不一樣 : Cookie保管在客戶端,不佔用服務器資源。假如併發閱讀的用戶十分多,Cookie是很好的選擇。 Session是保管在服務器端的,每一個用戶都會產生一個Session。假如併發訪問的用戶十分多,會產生十分多的Session,耗費大量的內存。

六、 跨域支持上的不一樣 : Cookie支持跨域名訪問,例如將domain屬性設置爲「.baidu.com」,則以「.baidu.com」爲後綴的一切域名均可以訪問該Cookie。跨域名Cookie現在被廣泛用在網絡中。而Session則不會支持跨域名訪問。Session僅在他所在的域名內有效。

以上整理於:blog.csdn.net/guoweimelon…

4、localStorage

webstorage是HTML5新出的標籤,是本地存儲的解決方案之一,有sessionStorage與localStorage兩種。

在HTML5中,新加入了一個localStorage特性,這個特性主要是用來做爲本地存儲來使用的,解決了cookie存儲空間不足的問題(cookie中每條cookie的存儲空間爲4k),localStorage中通常瀏覽器支持的是5M大小,這個在不一樣的瀏覽器中localStorage會有所不一樣。

webstorage擁有封裝好的方法,如setItem, getItem, removeItem,clear等。不像cookie那樣須要程序猿手動封裝。cookie的做用是與服務器進行交互,做爲http規範的一部分存在爲webstorage。而webstorage僅僅是爲了在本地存儲數據而生,它們都保存在客戶端瀏覽器。

cookie,localStorage, sessionStorage三者區別

cookie始終在同源的http請求中攜帶,即便不須要,cookie在瀏覽器和服務器中來回傳遞。而localStorage和sessionStora僅僅在本地存儲,不會好服務器通訊,也不會自動把數據發送給服務器。 存儲大小不一樣,cookie爲4kb左右;localStorage, sessionStorage能夠達到5M 數據有效期不一樣,sessionStorage僅在同源窗口中有效,關閉窗口就消失了,cookie能夠設置過時時間,localStorage長期有效 localStorage, sessionStorage有現成的API, cookie須要程序員手動封裝

相關文章
相關標籤/搜索