3分鐘搞懂Cookie與Session

爲何要寫這麼老的內容

CookieSession很早就有了,這麼多年來也沒什麼變更與更新,可是到如今,面試時被問到這倆哥們的概念的機率也是很是大,網上寫這哥倆的文章也是很是之多程序員

爲何還要寫呢,由於我忽然想起幾年前我在準備面試的時候,網上基本沒有那種又簡單,又清楚來描述這倆貨的文章,就算到如今我也沒見到面試

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

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

Cookie與Session的來源

我們作網站開發的,應該都接觸過用戶登陸驗證,就算在公司沒接觸過,我就不信你剛入門的時候沒跟着教程學着作一個登陸驗證的小功能服務器

在這我們就拿一個簡單的登陸來講,當用戶來到咱們的登陸頁面,輸入用戶名與密碼後點擊「登陸」按鈕以後,瀏覽器將頁面上的認證信息經過POST給咱們的服務器,當驗證經過後,瀏覽器就會跳轉到咱們的主頁面微信

那登陸成功以後,咱們的服務器又該如何驗證用戶在別的頁面的訪問權限呢?由於HTTP協議是無狀態的,因此咱們的服務器根本就沒辦法辨別剛剛驗證經過的用戶,如今發起的請求是否是經過了驗證。網絡

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

那總得想辦法解決吧,最簡單的方案就是全部的請求裏都帶上用戶名與密碼,雖然可行,可是大大的加大了咱們服務器的負擔,這回咱家公司是買服務器買倒閉的。。。學習

那麼只要客戶端或者服務器中保存着能夠表明身份的信息,那這樣咱們就不須要每次都驗證用戶名與密碼了,有了這個身份信息,咱們就能夠辨別,發起請求的用戶是否是已經經過驗證了,這就有了CookieSession網站

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

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

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

好了,廢話很少說了,步入正題!

什麼是Cookie

Cookie是存儲在用戶本地計算機上,用於保存一些用戶操做的歷史信息,當用戶再次訪問咱們的服務器的時候,瀏覽器經過HTTP協議,將他們本地的Cookie內容也發到我們服務器上,從而完成驗證

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

Cookie又分爲了會話Cookie與持久Cookie,要區分這兩種類型,很是的簡單,持久Cookie就是咱們設置了它的過時時間,而沒設置過時時間的,都屬於會話Cookie

由於當咱們設置了Cookie的過時時間,那麼這個Cookie就會存儲在用戶的硬盤中,而不是在內存中,由於不在內存中,無論用戶是關閉瀏覽器,仍是關機重啓,只要在有效時間內,這個Cookie都能用

什麼是Session

Session也很是簡單,這貨存儲在咱們的服務器上,就是在咱們的服務器上保存用戶的操做信息

當用戶訪問咱們的網站時,咱們的服務器會成一個Session ID,而後把Session ID存儲起來,再把這個Session ID發給咱們的用戶,用戶再次訪問咱們的服務器的時候,拿着這個Session ID就能驗證了,當這個ID能與咱們服務器上存儲的ID對應起來時,咱們就能夠認爲是本身人

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

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

Cookie與Session的不一樣

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

首先就是存儲方式的不一樣Cookie是存儲在用戶的計算機上,而Session是存儲在咱們的服務器上

由於用戶的帳號密碼存儲在用戶的計算機上,因此Cookie並不安全,但Session就必定安全麼?據說過Session劫持,XSS攻擊,就知道它自己並非安全的,要是不進行安全防禦,那確定也就不安全了(關於Cookie與Session的安全性問題,我會專門寫一篇文章來講)

因此,從安全性上來講,Session比起Cookie來講,仍是要更安全的

用戶在使用Cookie的時候,由於須要隨着請求一塊兒將Cookie發送給服務器,因此爲了訪問速度,Cookie的大小確定不能太大,否則僅僅一個Cookie的傳遞,就把網絡給搞死了,那還玩什麼……而由於Session只須要傳個ID就行了,內容什麼的,我們服務器上都有呢,隨便存多少均可以。

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

寫在最後的廢話

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

這個4月,更新比較少,甚至斷更了一個星期,由於最近公司項目趕進度,KPI指標還壓的緊,再加上本身在調節睡眠,因此更新頻率下來了​

三月份的時候,每天寫文熬夜到二、3點,在三月底的時候,明顯感受到本身身體情況不佳,頭髮掉了一大半。爲了守護住日漸上移的髮際線,我仍是準備早睡早起了。

再過幾天,公司的項目壓力沒那麼大的時候,就又能夠穩定更新了。

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

相關文章
相關標籤/搜索