第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Session 和 Cookie 的概念

網(wǎng)站通過(guò) Session 和 Cookie 的機(jī)制記錄訪問(wèn)者的一些基本信息,本小節(jié)依次講解 Cookie 和 Session 的概念,并講解了如何使用 Cookie 實(shí)現(xiàn) Session。

1. 需求的提出

網(wǎng)站常常需要記錄訪問(wèn)者的一些基本信息,例如:用戶是否登錄、用戶登錄名稱(chēng)、密碼、用戶在 Web 站點(diǎn)購(gòu)物的方式或用戶訪問(wèn)該站點(diǎn)的次數(shù)。

舉個(gè)例子,用戶在沒(méi)有登陸 baidu 時(shí),此時(shí)用戶的身份是游客,baidu 首頁(yè)的界面如下圖所示:

圖片描述

當(dāng)用戶登陸 baidu 頁(yè)面后,此時(shí)用戶的身份是已登錄用戶,可以看到頁(yè)面的右上角顯示了用戶的名稱(chēng),如下圖所示:

圖片描述

可以看出,baidu 服務(wù)端能夠辨別用戶的身份,根據(jù)用戶是否登錄顯示不同的內(nèi)容。如果用戶的身份是游客,則顯示文本登陸;如果用法的身份是已登錄用戶,則顯示用戶的名稱(chēng)。

網(wǎng)站為了辨別用戶身份、進(jìn)行會(huì)話跟蹤需要把一些數(shù)據(jù) (例如:登錄狀態(tài)、用戶名稱(chēng)) 儲(chǔ)存在用戶本地終端上,這些數(shù)據(jù)被稱(chēng)為 Cookie。

以登錄 baidu 為例子,用戶在沒(méi)有登陸 baidu 時(shí),訪問(wèn)的網(wǎng)頁(yè) URL 是 https://www.baidu.com;在登陸 baidu 后,訪問(wèn)的網(wǎng)頁(yè) URL 仍然是 https://www.baidu.com。訪問(wèn)的頁(yè)面 URL 相同,但是這兩次訪問(wèn)呈現(xiàn)的結(jié)果不相同,登陸前沒(méi)有顯示用戶名,登陸后顯示了用戶名。

服務(wù)端是通過(guò) Cookie 的技術(shù)區(qū)分這兩次請(qǐng)求的,如下圖所示:

圖片描述

  1. 用戶登陸 baidu
  2. baidu 服務(wù)端會(huì)生成一個(gè)用戶 ID
  3. baidu 服務(wù)端將這個(gè)用戶 ID 發(fā)送給瀏覽器
  4. 瀏覽器收到這個(gè)用戶 ID 后,會(huì)將這個(gè)用戶 ID 保存在用戶本地終端
  5. 瀏覽器再次訪問(wèn) baidu 站點(diǎn)時(shí),瀏覽器會(huì)將保存在本地的用戶 ID 發(fā)給 baidu 服務(wù)端

服務(wù)端收到瀏覽器發(fā)送的用戶 ID 后,就知道此次請(qǐng)求來(lái)自于一個(gè)已經(jīng)登陸的用戶。在以上的交互過(guò)程中,保存在客戶端的用戶 ID 就被稱(chēng)為 Cookie。

通過(guò)設(shè)置 HTTP 的 Set-Cookie 消息頭,Web 服務(wù)器將 Cookie 發(fā)送給瀏覽器。Set-Cookie 消息的格式如下面所示,括號(hào)中的部分都是可選的:

Set-Cookie:value [ ;expires=date][ ;domain=domain][ ;path=path][ ;secure]

消息頭的第一部分,value 部分,通常是一個(gè) name=value 格式的字符串。

服務(wù)端向客戶端發(fā)送的 HTTP 響應(yīng)中設(shè)置 HTTP 的 Set-Cookie 消息頭,一個(gè)具體的例子如下:

Connection:keep-alive
Content-Type:text/plain
Date:Fri, 14 Jul 2017 10:49:23 GMT
Set-Cookie:user=ZhangSan
Transfer-Encoding:chunked

在這個(gè)例子中,服務(wù)端向客戶端發(fā)送的 HTTP 消息頭中,設(shè)置了 ‘Set-Cookie:user=ZhangSan’,客戶端瀏覽器將接受到字符串 ‘user=ZhangSan’ 作為 Cookie,下次訪問(wèn)網(wǎng)站時(shí),瀏覽器會(huì)將該 Cookie 發(fā)送給服務(wù)端。

客戶端收到服務(wù)端的 Cookie 后,該 Cookie 會(huì)在接下來(lái)的每個(gè)請(qǐng)求中被發(fā)送至服務(wù)器。Cookie 的值被存儲(chǔ)在名為 Cookie 的 HTTP 消息頭中,并且只包含了 Cookie 的值,其它的選項(xiàng)全部被去除。

客戶端向服務(wù)端發(fā)送的 HTTP 請(qǐng)求中設(shè)置 Cookie 消息頭,一個(gè)具體的例子如下:

Connection:keep-alive
Cookie:user=ZhangSan
Host:localhost:8080
User-Agent:Mozilla/5.0 AppleWebKit/537.36 Chrome Safari

在這個(gè)例子中,客戶端向服務(wù)端發(fā)送的 HTTP 消息頭中,設(shè)置了 ‘Cookie:user=ZhangSan’,服務(wù)端接受到字符串 ‘user=ZhangSan’ 作為 Cookie,從而確認(rèn)此次請(qǐng)求對(duì)應(yīng)的用戶。

4. Session 簡(jiǎn)介

Session 是在服務(wù)端保存的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)存儲(chǔ)用戶的信息 (例如登錄狀態(tài)、用戶名稱(chēng)),Session 數(shù)據(jù)可以保存在內(nèi)存、文件或者數(shù)據(jù)庫(kù)中。Session 有一個(gè)唯一標(biāo)識(shí) SID (Session ID),對(duì)應(yīng)一個(gè)用戶,在服務(wù)端使用 SID 可以查找到對(duì)應(yīng)用戶的數(shù)據(jù)。

假設(shè)有 2 個(gè)用戶:用戶 A 和用戶 B;在服務(wù)端存在 2 個(gè) Session,用于存儲(chǔ)用戶 A 和用戶 B 的數(shù)據(jù),如下圖所示:

圖片描述

在服務(wù)端使用 SID 查找 Session 的過(guò)程如下:

  • 每一個(gè) Session 有一個(gè)唯一標(biāo)識(shí) SID,用戶 A 的 Sesion 的 SID 為 0,用戶 B 的 Sesion 的 SID 為 1;
  • 用戶訪問(wèn)網(wǎng)站時(shí),會(huì)把自己的 SID 作為 Cookie 發(fā)送給服務(wù)端;
  • 服務(wù)端則根據(jù)請(qǐng)求中的 SID 來(lái)尋找對(duì)應(yīng)的 Session。

通過(guò)一個(gè)具體的例子,解釋如何使用 Cookie 實(shí)現(xiàn) Session。使用 Cookie 實(shí)現(xiàn) Session 包含有兩個(gè)步驟:

1. 首次訪問(wèn),服務(wù)端發(fā)送 Set-Cookie 消息頭

圖片描述

首先,客戶端首次訪問(wèn)網(wǎng)站時(shí),服務(wù)端創(chuàng)建一個(gè) Session 用于記錄用戶的信息,使用一個(gè)唯一的會(huì)話 ID 標(biāo)識(shí)該 Session。

然后,服務(wù)端將會(huì)話 ID 通過(guò) Set-Cookie 消息頭 (例如,Set-Cookie: sid=0) 發(fā)給客戶端,客戶端保存這個(gè)會(huì)話 ID。

在上圖中,存在兩個(gè)用戶:用戶 A 和用戶 B,服務(wù)端為它們分別創(chuàng)建一個(gè) Session。每個(gè) Session 擁有一個(gè)唯一的 SID,用戶 A 的 SID 等于 0,用戶 B 的 SID 等于 1。

2. 后續(xù)訪問(wèn),客戶端發(fā)送 Cookie 消息頭

圖片描述

客戶再次訪問(wèn)服務(wù)端時(shí),會(huì)將會(huì)話 ID 通過(guò) Cookie 消息頭發(fā)給服務(wù)端,服務(wù)端根據(jù)請(qǐng)求中的 SID,尋找相應(yīng)的 Session,該 Session 中存儲(chǔ)相應(yīng)用的數(shù)據(jù)。最后,服務(wù)端將特定用戶的數(shù)據(jù)發(fā)給客戶端。

6. 小結(jié)

本小節(jié)講解了 Session 和 Cookie 的概念,使用思維導(dǎo)圖概括如下:

圖片描述

在下一個(gè)小節(jié)中,通過(guò)實(shí)例講解如何在 Flask 中使用 Cookie 和 Session。