在线乱码卡一卡二卡新HD,最近韩国免费观看视频,国产色无码精品视频国产,亚洲男人的天堂久久香蕉

全球關注:Session 和 Cookies 有什么區別?
來源:今日頭條    時間:2022-08-02 09:02:21

大家好,我是前端西瓜哥。


(資料圖片)

很多初學者會分不清 Session 和 Cookies 的區別,今天西瓜哥我就帶大家來掌握這兩個概念。

登錄網站的表象

你進入網站的登錄頁面,輸入用戶名和密碼,點擊 “登錄” 按鈕,然后你就登錄成功了,然后就可以進行需要登錄才能進行的操作,比如給西瓜哥的文章點贊。

之后,你再打開這個網站,就不用再輸入用戶名和密碼了。

?其實是因為你使用了一個 “看不見” 的用戶憑證,它被緩存在當前瀏覽器中,在它過期前你依舊是登錄狀態。

而當你打開另一個瀏覽器時,或者用另一臺電腦打開時,你還是要走一遍登錄流程,才能拿到用戶憑證實現登錄狀態。

上面行為的底層到底發生了什么呢??

Session

當用戶將用戶名和密碼發給服務端后,服務端會從用戶表中,驗證用戶名是否匹配密碼。

user 用戶表大概如下:

user_id user_name password--------------------------------------- 1 前端西瓜哥 kksk456 2 watermelon ou114514

如果用戶名和密碼正確,就會生成一個隨機的 id 作為用戶的憑證,存放到一個映射表里,并讓這個隨機 id 映射到對應的用戶 id。

我們可以將它存到數據庫中:

session_id user_id-----------------------kdj1231j 2

你也可以存到內存、redis 之類可以快速訪問的存儲介質中。

此外,session_id 在映射表中也不能有相同的值,否則會導致張三登錄拿到了李四的號。

這樣一個保存用戶憑證(session_id)到用戶 id 的映射存儲,就是所謂的 Session 了。

Session 的意思是會話的意思,可以記錄狀態。就像兩個人建立交談后,在交談的過程中我們知道雙方彼此,但一旦結束對話,我們就形同陌路。

Cookies

session_id 創建好了,接下來就是要將這個 sesson_id 傳給瀏覽器,讓瀏覽器把它保存起來,并讓瀏覽器在之后的每次請求中都帶上這個 session_id,好讓服務器識別用戶。

但瀏覽器的請求是基于 HTTP 協議的,這種協議的一個特點是無狀態。即在協議的實現上,無法知道對方是誰,任意兩個請求都是獨立的,它不知道一個請求的發起人是否為之前某個請求的發起人。這樣的話,我們就難以實現維持登錄狀態。

為了解決這個問題,Cookies 出現了,它能夠將服務端返回的一些信息保存下來,并在之后的請求中將其帶上。

服務端會在 HTTP 響應頭字段中帶上 Set-Cookie 字段,會帶上我們需要設置的鍵值對,以及其他信息(比如有效期),如下:

Set-Cookie: session_id=kdj1231j; Max-Age=10000000

瀏覽器接收到后,就會將其保存到瀏覽器中。之后的每次請求,瀏覽器都會在 HTTP 請求頭中帶上 session_id 信息:

Cookie: session_id=kdj1231j;

服務端會取出 session_id 去 session 映射表中去找。

如果存在,我們就取出其用戶 id,基于這個用戶 id 去獲取一些私人信息,比如你的銀行余額。

結尾

Session 是一個用戶憑證(sesson_id)映射到用戶id的一個映射表,用于通過用戶憑證識別用戶。

而 Cookies 則是 HTTP 協議中可以用來保存狀態的驚喜小甜點,它能夠將服務器返回的一些數據保存下來,在下一次請求中攜帶上。

關鍵詞: 我就帶大家 登錄成功 存儲介質 可以用來 記錄狀態

上一篇:

下一篇:

X 關閉

X 關閉

<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>