Cookie和Session的使用和區(qū)別


Cookie中譯小甜餅,是網(wǎng)頁瀏覽器用來保存用戶信息的文件,可以保存比如用戶是誰,購物車有哪些商品等。

Session會(huì)話,會(huì)話是指我們訪問網(wǎng)站的一個(gè)周期。

比如用戶打開一個(gè)瀏覽器訪問某個(gè)位的站點(diǎn)。

在這個(gè)站點(diǎn)點(diǎn)擊多個(gè)超鏈接查看各個(gè)網(wǎng)頁,然后關(guān)閉瀏覽器,整個(gè)過程稱之為一個(gè)會(huì)話。


我們?yōu)g覽網(wǎng)頁使用的HTTP協(xié)議是無狀態(tài)的協(xié)議,就是說網(wǎng)頁一關(guān)閉,瀏覽器和服務(wù)端的連接就會(huì)斷開,下次打開網(wǎng)頁又要重新連接,服務(wù)器無法從你一打開的連接上恢復(fù)上一次的會(huì)話,服務(wù)器不知道是你又回來了。

有了cookie情況就不同了,除非我們之前把你的信息記錄在cookie里,在你打開網(wǎng)頁和服務(wù)器建立連接的時(shí)候,把cookie記錄的你的信息一起發(fā)送給服務(wù)器,這樣服務(wù)器就能從cookie接收到的信息里識(shí)別你的身份,讓頁面為你提供特別屬于你的內(nèi)容。

我們訪問瀏覽器的時(shí)候,瀏覽器會(huì)發(fā)送一個(gè)HTTP請求到服務(wù)器端;
服務(wù)器會(huì)發(fā)送一個(gè)HTTP響應(yīng)到客戶端,其中包括Sst-Cookie,意思就是瀏覽器建立一個(gè)cookie保存服務(wù)器指定的內(nèi)容,比如用戶信息和用戶操作信息;
瀏覽器保存好信息之后,下次我們再次訪問網(wǎng)站的時(shí)候,瀏覽器再發(fā)送HTTP請求到服務(wù)器端時(shí)都會(huì)攜帶之前保存的cookie;
服務(wù)器端會(huì)從收到的cookie中識(shí)別用戶身份,就能讓頁面為你提供專門屬于你的內(nèi)容了。

比如我們從網(wǎng)站的登陸界面中看到有記住我這個(gè)選項(xiàng),你勾選了它以后,登陸成功,瀏覽器就會(huì)把你的信息放在cookie里,下次再訪問這個(gè)網(wǎng)站的時(shí)候,服務(wù)器就能根據(jù)收到的cookie識(shí)別出是你,幫你自動(dòng)登陸,顯示專屬于你的內(nèi)容。

cookie存儲(chǔ)的數(shù)量和字符數(shù)量都有限制,只能存儲(chǔ)幾十個(gè),不超4096左右個(gè)字符。

cookie存儲(chǔ)在用戶瀏覽器里也不安全,任何人都能直接查看。

我們以谷歌瀏覽器為例查看cookie,我們右擊找到檢查,點(diǎn)擊打開瀏覽器控制臺(tái),或者按F12

找到Console


在其中輸入document.cookie即可查看

session在計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用中被稱為“會(huì)話控制”。

客戶端瀏覽器訪問網(wǎng)站的時(shí)候

服務(wù)器會(huì)向客戶瀏覽器發(fā)送一個(gè)每個(gè)用戶特有的會(huì)話編號sessionID,讓他進(jìn)入到cookie里。

服務(wù)器同時(shí)也把sessionID和對應(yīng)的用戶信息、用戶操作記錄在服務(wù)器上,這些記錄就是session。

客戶端瀏覽器再次訪問時(shí),會(huì)發(fā)送cookie給服務(wù)器,其中就包含sessionID。

服務(wù)器從cookie里找到sessionID,再根據(jù)sessionID找到以前記錄的用戶信息就可以知道他之前操控些、訪問過哪里。

session保存在服務(wù)器端比較安全,但是可能需要記錄千百萬用戶的信息,對服務(wù)器的存儲(chǔ)壓力很大,所以我們應(yīng)該有選擇的合理使用cookie和session。