3分鐘搞懂Cookie與Session

鬧鬧吃魚發表於2019-04-23

3分鐘搞懂Cookie與Session

為什麼要寫這麼老的內容

CookieSession很早就有了,這麼多年來也沒什麼變動與更新,但是到現在,面試時被問到這倆哥們的概念的概率也是非常大,網上寫這哥倆的文章也是非常之多

為什麼還要寫呢,因為我突然想起幾年前我在準備面試的時候,網上基本沒有那種又簡單,又清楚來描述這倆貨的文章,就算到現在我也沒見到

就像Git的使用一樣,基本上很多人都說半個小時就能學會,可你真從零開始去學的時候,花了一兩天的時間可能還不知道怎麼用,明明就是一個很簡單的工具使用,偏偏被整的無比高大上,我只需要找個起子去擰個螺絲罷了,而你偏偏要告訴我怎麼去製作這個起子,真的很難受

其實要弄明白CookieSession這哥倆的作用與區別,只需要知道他們怎麼來的,基本上就弄明白了

Cookie與Session的來源

我們們做網站開發的,應該都接觸過使用者登入驗證,就算在公司沒接觸過,我就不信你剛入門的時候沒跟著教程學著做一個登入驗證的小功能

在這我們們就拿一個簡單的登入來說,當使用者來到我們的登入頁面,輸入使用者名稱與密碼後點選“登入”按鈕之後,瀏覽器將頁面上的認證資訊通過POST給我們的伺服器,當驗證通過後,瀏覽器就會跳轉到我們的主頁面

那登入成功之後,我們的伺服器又該如何驗證使用者在別的頁面的訪問許可權呢?因為HTTP協議是無狀態的,所以我們的伺服器根本就沒辦法辨別剛剛驗證通過的使用者,現在發起的請求是不是通過了驗證。

而我們又不能因為HTTP無狀態,讓使用者在每次發起請求的時候,都要輸一次賬號密碼驗證,要真這樣搞,我想我們家的網站距離倒閉的日子,指日可待啊

那總得想辦法解決吧,最簡單的方案就是所有的請求裡都帶上使用者名稱與密碼,雖然可行,但是大大的加大了我們伺服器的負擔,這回我們家公司是買伺服器買倒閉的。。。

那麼只要客戶端或者伺服器中儲存著可以代表身份的資訊,那這樣我們就不需要每次都驗證使用者名稱與密碼了,有了這個身份資訊,我們就可以辨別,發起請求的使用者是不是已經通過驗證了,這就有了CookieSession

總結起來其實就是一句話:因為Http協議無狀態,在需要識別狀態的時候,需要藉助外力來辨別,而這個外力就是Cookie與Session

在說Cookie與Session的內容之前,前方高能預警

3分鐘搞懂Cookie與Session

我臭不要臉的畫了2張鬼畫符給大家參考理解,那個…想給我點面子的,現在急剎車退出還來得及…

好了,廢話不多說了,步入正題!

什麼是Cookie

Cookie是儲存在使用者本地計算機上,用於儲存一些使用者操作的歷史資訊,當使用者再次訪問我們的伺服器的時候,瀏覽器通過HTTP協議,將他們本地的Cookie內容也發到我們們伺服器上,從而完成驗證

千言萬語不如一張圖,靈魂畫手登場

3分鐘搞懂Cookie與Session

Cookie又分為了會話Cookie與持久Cookie,要區分這兩種型別,非常的簡單,持久Cookie就是我們設定了它的過期時間,而沒設定過期時間的,都屬於會話Cookie

因為當我們設定了Cookie的過期時間,那麼這個Cookie就會儲存在使用者的硬碟中,而不是在記憶體中,因為不在記憶體中,不管使用者是關閉瀏覽器,還是關機重啟,只要在有效時間內,這個Cookie都能用

什麼是Session

Session也非常簡單,這貨儲存在我們的伺服器上,就是在我們的伺服器上儲存使用者的操作資訊

當使用者訪問我們的網站時,我們的伺服器會成一個Session ID,然後把Session ID儲存起來,再把這個Session ID發給我們的使用者,使用者再次訪問我們的伺服器的時候,拿著這個Session ID就能驗證了,當這個ID能與我們伺服器上儲存的ID對應起來時,我們就可以認為是自己人

還是一樣,千言萬語不如一張圖容易理解,靈魂畫手再次登場

3分鐘搞懂Cookie與Session

這圖有沒有點進步??我看起來還是有點進步的,只是這個字…因為是在手機上拿著手寫筆寫的,就有點慘不忍睹了……emmmm

Cookie與Session的不同

這是在面試中最容易被問到的問題,其實弄明白了上面的內容,這個問題就是送分題

首先就是儲存方式的不同Cookie是儲存在使用者的計算機上,而Session是儲存在我們的伺服器上

因為使用者的賬號密碼儲存在使用者的計算機上,所以Cookie並不安全,但Session就一定安全麼?聽說過Session劫持,XSS攻擊,就知道它本身並不是安全的,要是不進行安全防護,那肯定也就不安全了(關於Cookie與Session的安全性問題,我會專門寫一篇文章來說)

所以,從安全性上來說,Session比起Cookie來說,還是要更安全的

使用者在使用Cookie的時候,因為需要隨著請求一起將Cookie傳送給伺服器,所以為了訪問速度,Cookie的大小肯定不能太大,不然僅僅一個Cookie的傳遞,就把網路給搞死了,那還玩什麼……而因為Session只需要傳個ID就好了,內容什麼的,我們們伺服器上都有呢,隨便存多少都可以。

從這點也能看出,Cookie與Seesion的儲存內容大小也是有區別的

寫在最後的廢話

說三分鐘搞懂就三分鐘,絕不唬人,應該也算是簡單易懂並且容易記憶了。

這個4月,更新比較少,甚至斷更了一個星期,因為最近公司專案趕進度,KPI指標還壓的緊,再加上自己在調節睡眠,所以更新頻率下來了​

三月份的時候,天天寫文熬夜到2、3點,在三月底的時候,明顯感覺到自己身體狀況不佳,頭髮掉了一大半。為了守護住日漸上移的髮際線,我還是準備早睡早起了。

再過幾天,公司的專案壓力沒那麼大的時候,就又可以穩定更新了。

3分鐘搞懂Cookie與Session

掃碼關注微信公眾號「鬧鬧吃魚」,領取程式設計師學習大禮包!都是經過我本人篩選,整理後的好資源,不僅僅只是技術~!

相關文章