溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Cookie和Session的區(qū)別是什么

發(fā)布時間:2020-09-16 09:39:32 來源:億速云 閱讀:198 作者:小新 欄目:web開發(fā)

小編給大家分享一下Cookie和Session的區(qū)別是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

HTTP無狀態(tài)協(xié)議

HTTP無狀態(tài)協(xié)議,是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時它的應(yīng)答就較快。

簡介

客戶端與服務(wù)器進行動態(tài)交互的Web應(yīng)用程序出現(xiàn)之后,HTTP無狀態(tài)的特性嚴(yán)重阻礙了這些應(yīng)用程序的實現(xiàn),畢竟交互是需要承前啟后的,簡單的購物車程序也要知道用戶到底在之前選擇了什么商品。于是,兩種用于保持HTTP連接狀態(tài)的技術(shù)就應(yīng)運而生了,一個是Cookie,而另一個則是Session。HTTP本身是一個無狀態(tài)的連接協(xié)議,為了支持客戶端與服務(wù)器之間的交互,我們就需要通過不同的技術(shù)為交互存儲狀態(tài),而這些不同的技術(shù)就是Cookie和Session了。

Cookie是通過客戶端保持狀態(tài)的解決方案。從定義上來說,Cookie就是由服務(wù)器發(fā)給客戶端的特殊信息,而這些信息以文本文件的方式存放在客戶端,然后客戶端每次向服務(wù)器發(fā)送請求的時候都會帶上這些特殊的信息。讓我們說得更具體一些:當(dāng)用戶使用瀏覽器訪問一個支持Cookie的網(wǎng)站的時候,用戶會提供包括用戶名在內(nèi)的個人信息并且提交至服務(wù)器;接著,服務(wù)器在向客戶端回傳相應(yīng)的超文本的同時也會發(fā)回這些個人信息,當(dāng)然這些信息并不是存放在HTTP響應(yīng)體(Response Body)中的,而是存放于HTTP響應(yīng)頭(Response Header);當(dāng)客戶端瀏覽器接收到來自服務(wù)器的響應(yīng)之后,瀏覽器會將這些信息存放在一個統(tǒng)一的位置,對于Windows操作系統(tǒng)而言,我們可以從: [系統(tǒng)盤]:Documents and Settings[用戶名]Cookies目錄中找到存儲的Cookie;自此,客戶端再向服務(wù)器發(fā)送請求的時候,都會把相應(yīng)的Cookie再次發(fā)回至服務(wù)器。而這次,Cookie信息則存放在HTTP請求頭(Request Header)了。斜體文字

發(fā)展

有了Cookie這樣的技術(shù)實現(xiàn),服務(wù)器在接收到來自客戶端瀏覽器的請求之后,就能夠通過分析存放于請求頭的Cookie得到客戶端特有的信息,從而動態(tài)生成與該客戶端相對應(yīng)的內(nèi)容。通常,我們可以從很多網(wǎng)站的登錄界面中看到“請記住我”這樣的選項,如果你勾選了它之后再登錄,那么在下一次訪問該網(wǎng)站的時候就不需要進行重復(fù)而繁瑣的登錄動作了,而這個功能就是通過Cookie實現(xiàn)的。

與Cookie相對的一個解決方案是Session,它是通過服務(wù)器來保持狀態(tài)的。由于Session這個詞匯包含的語義很多,因此需要在這里明確一下 Session的含義。首先,我們通常都會把Session翻譯成會話,因此我們可以把客戶端瀏覽器與服務(wù)器之間一系列交互的動作稱為一個 Session。從這個語義出發(fā),我們會提到Session持續(xù)的時間,會提到在Session過程中進行了什么操作等等;其次,Session指的是服務(wù)器端為客戶端所開辟的存儲空間,在其中保存的信息就是用于保持狀態(tài)。從這個語義出發(fā),我們則會提到往Session中存放什么內(nèi)容,如何根據(jù)鍵值從 Session中獲取匹配的內(nèi)容等。
要使用Session,第一步當(dāng)然是創(chuàng)建Session了。那么Session在何時創(chuàng)建呢?當(dāng)然還是在服務(wù)器端程序運行的過程中創(chuàng)建的,不同語言實現(xiàn)的應(yīng)用程序有不同創(chuàng)建Session的方法,而在Java中是通過調(diào)用HttpServletRequest的getSession方法(使用true作為參數(shù))創(chuàng)建的。在創(chuàng)建了Session的同時,服務(wù)器會為該Session生成唯一的Session id,而這個Session id在隨后的請求中會被用來重新獲得已經(jīng)創(chuàng)建的Session;在Session被創(chuàng)建之后,就可以調(diào)用Session相關(guān)的方法往Session中增加內(nèi)容了,而這些內(nèi)容只會保存在服務(wù)器中,發(fā)到客戶端的只有Session id;當(dāng)客戶端再次發(fā)送請求的時候,會將這個Session id帶上,服務(wù)器接受到請求之后就會依據(jù)Session id找到相應(yīng)的Session,從而再次使用之。正是這樣一個過程,用戶的狀態(tài)也就得以保持了。
綜上所述,HTTP本身是一個無狀態(tài)的連接協(xié)議,為了支持客戶端與服務(wù)器之間的交互,我們就需要通過不同的技術(shù)為交互存儲狀態(tài),而這些不同的技術(shù)就是Cookie和Session了。

Cookie

存放位置

cookie數(shù)據(jù)存放在客戶的瀏覽器上,服務(wù)器能夠知道其中的信息;

使用方式

如果在瀏覽器中不設(shè)置過期時間,cookie被保存在內(nèi)存中,生命周期隨瀏覽器的關(guān)閉而結(jié)束,這種cookie簡稱會話cookie。

如果在瀏覽器中設(shè)置了cookie的過期時間,cookie被保存在硬盤中,關(guān)閉瀏覽器后,cookie數(shù)據(jù)仍然存在,直到過期時間結(jié)束才消失。

存儲

單個cookie保存的數(shù)據(jù)不能超過4KB,一個服務(wù)器最多在客戶端瀏覽器上保存20個Cookie,一個瀏覽器最多保存300個Cookie;
cookie只能保存字符串類型,以文本的方式

應(yīng)用場景

cookie技術(shù)有4個組件:在HTTP響應(yīng)報文中有一個cookie首部行;在HTTP請求報文中有一個cookie首部行;在用戶端系統(tǒng)中保留有一個cookie文件,并由用戶的瀏覽器進行管理;位于Web站點的一個后端數(shù)據(jù)庫

Cookie和Session的區(qū)別是什么

判斷用戶是否登陸過網(wǎng)站,以便下次登錄時能夠?qū)崿F(xiàn)自動登錄(或者記住密碼)。

如果我們刪除cookie,則每次登錄必須從新填寫登錄的相關(guān)信息。

保存上次登錄的時間等信息。 保存上次查看的頁面 瀏覽計數(shù)訪問

cookie中如果設(shè)置了路徑參數(shù),那么同一個網(wǎng)站中不同路徑下的cookie互相是訪問不到的。

缺點

Cookie和Session的區(qū)別是什么

大小受限、用戶可以操作(禁用)cookie,使功能受限、、安全性較低、有些狀態(tài)不可能保存在客戶端、每次訪問都要傳送cookie給服務(wù)器,浪費帶寬、cookie數(shù)據(jù)有路徑(path)的概念,可以限制cookie只屬于某個路徑下。

其他

Cookie和Session的區(qū)別是什么

Cookie和Session的區(qū)別是什么

攜帶cookie進行數(shù)據(jù)請求

cookie數(shù)據(jù)始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和服務(wù)器間來回傳遞;
每次請求一個新的頁面的時候cookie都會被發(fā)送過去,這樣無形中浪費了帶寬,另外cookie還需要指定作用域,不可跨域調(diào)用。

Session

存放位置

session數(shù)據(jù)放在服務(wù)器上,客戶端不知道其中的信息,不過session可以通過特殊的方式做持久化管理(memcache,redis);

使用方式

session在什么時候創(chuàng)建,以及session一致性問題

session會在一定時間內(nèi)保存在服務(wù)器上,當(dāng)訪問增多,會比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用cookie
當(dāng)程序需要為某個客戶端的請求創(chuàng)建一個session時,服務(wù)器首先檢查這個客戶端的請求里是否已包含了一個session標(biāo)識(稱為session id),如果已包含則說明以前已經(jīng)為此客戶端創(chuàng)建過session,服務(wù)器就按照session id把這個session檢索出來使用檢索不到,會新建一個),如果客戶端請求不包含session id,則為客戶端創(chuàng)建一個session并且生成一個與此session相關(guān)聯(lián)的session id,session id的值應(yīng)該是一個既不會重復(fù),又不容易被找到規(guī)律以仿造的字符串,這個session id將被在本次響應(yīng)中返回給客戶端保存。保存這個session id的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規(guī)則把這個標(biāo)識發(fā)送給服務(wù)器。

通常使用cookie方式存儲sessionid到客戶端,在交互中瀏覽器按照規(guī)則將sessionid發(fā)送給服務(wù)器。如果用戶禁用cookie,則要使用URL重寫,可以通過response.encodeURL(url)
進行實現(xiàn);API對encodeURL的結(jié)束為,當(dāng)瀏覽器支持Cookie時,url不做任何處理;當(dāng)瀏覽器不支持Cookie的時候,將會重寫URL將SessionID拼接到訪問地址后。

存儲

session大小沒有限制
session中保存的是對象,session通過類似與Hashtable的數(shù)據(jù)結(jié)構(gòu)來保存,能支持任何類型的對象(session中可含有多個對象)

應(yīng)用場景

Session用于保存每個用戶的專用信息,變量的值保存在服務(wù)器端,通過SessionID來區(qū)分不同的客戶。
  1. 網(wǎng)上商城中的購物車
  2. 保存用戶登錄信息
  3. 將某些數(shù)據(jù)放入session中,供同一用戶的不同頁面使用
  4. 防止用戶非法登錄

訪問

session不能區(qū)分路徑,同一個用戶在訪問一個網(wǎng)站期間,所有的session在任何一個地方都可以訪問到。

缺點

Session保存的東西越多,就越占用服務(wù)器內(nèi)存,對于用戶在線人數(shù)較多的網(wǎng)站,服務(wù)器的內(nèi)存壓力會比較大、依賴于cookie(sessionID保存在cookie),如果禁用cookie,則要使用URL重寫,不安全、創(chuàng)建Session變量有很大的隨意性,可隨時調(diào)用,不需要開發(fā)者做精確地處理,所以,過度使用session變量將會導(dǎo)致代碼不可讀而且不好維護。

看完了這篇文章,相信你對Cookie和Session的區(qū)別是什么有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI