自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

狀態(tài)管理小能手:Cookie 和 Session

網(wǎng)絡(luò)
Session 與 Cookie 是構(gòu)建現(xiàn)代網(wǎng)站的重要組成部分。它們?yōu)橛脩?hù)提供了方便的登錄和個(gè)性化體驗(yàn),同時(shí)也保障了用戶(hù)的隱私和安全。

一、引言

大家好,我是小?,一個(gè)漂泊江湖多年的 985 非科班程序員,曾混跡于國(guó)企、互聯(lián)網(wǎng)大廠(chǎng)和創(chuàng)業(yè)公司的后臺(tái)開(kāi)發(fā)攻城獅。

假期搶票的尷尬事件

最近小?在搶出行的高鐵票時(shí),發(fā)生了一件尷尬的事情。

這不是臨近中秋和國(guó)慶假期了嘛,按以往經(jīng)驗(yàn),搶票應(yīng)該比較難。于是我通過(guò)渠道找了一牛子哥,幫忙搶票,搶票時(shí)間在第二天早上 9 點(diǎn)。

好巧不巧,第二天 8點(diǎn)多的時(shí)候正好打開(kāi)了手機(jī),就想著上 12306 去看看票。

輸手機(jī)號(hào),拿驗(yàn)證碼,登錄,一氣呵成!

結(jié)果,到 9 點(diǎn)多的時(shí)候牛子哥給我說(shuō)搶票失敗了!原因竟然是中途賬號(hào)被頂了,而 12306 一個(gè)賬號(hào)同一時(shí)間只能讓一部手機(jī)登錄。

啊這?!

我還以為牛子哥用了什么高端渠道,或者是神奇 App,原來(lái)...

于是,我就趁此機(jī)會(huì)復(fù)習(xí)一下 12306 的登錄機(jī)制,便有了這篇文章!

設(shè)備限制的底層邏輯

如今,網(wǎng)站或者手機(jī)應(yīng)用限制登錄設(shè)備個(gè)數(shù)已經(jīng)屢見(jiàn)不鮮了。

不管是限制登錄個(gè)數(shù),還是保持登錄狀態(tài),都和網(wǎng)絡(luò)交互的 HTTP 協(xié)議,以及客戶(hù)端和服務(wù)端的 Cookie、Session 技術(shù)息息相關(guān)。

雖然咱每天都在與它們打交道,但你是否真的理解它們的原理和使用方式呢?接下來(lái),讓我們一起來(lái)揭開(kāi)它們的神秘面紗吧!

二、產(chǎn)生背景

我們都知道,HTTP 是一個(gè)無(wú)狀態(tài)協(xié)議。

無(wú)狀態(tài)是指服務(wù)端不會(huì)跟蹤和記錄請(qǐng)求,即對(duì)請(qǐng)求處理沒(méi)有記憶能力,這意味著每個(gè)請(qǐng)求都是獨(dú)立的。

它的優(yōu)缺點(diǎn)分別是:

  • 優(yōu)點(diǎn):服務(wù)器處理請(qǐng)求時(shí)不需要上下文信息,因此應(yīng)答很快,每一次請(qǐng)求都是“點(diǎn)到為止”,提升了請(qǐng)求處理的效率。
  • 缺點(diǎn):缺少訪(fǎng)問(wèn)狀態(tài)意味著如果后續(xù)請(qǐng)求和之前有關(guān)聯(lián),比如 APP 登錄功能,就會(huì)導(dǎo)致切換 APP 頁(yè)面時(shí),就必須重傳請(qǐng)求。

想象一下,每次在手機(jī)上切換應(yīng)用,或者把應(yīng)用收到后臺(tái)就需要我們重新登錄一次,那也太惡心了。

一般應(yīng)用或者網(wǎng)站都會(huì)有這種登錄狀態(tài):

所以,我們對(duì)登錄功能的訴求是:

  • 登陸 APP 時(shí),需要記住登錄用戶(hù)名密碼信息,避免每次都進(jìn)行用戶(hù)名密碼輸入操作。
  • 登陸 APP 時(shí),需要記住用戶(hù)登陸的狀態(tài),避免每次都進(jìn)行重復(fù)登錄的操作。

除此之外,在一些其它 Web 交互場(chǎng)景下也需要記住狀態(tài),比如:

  • 購(gòu)物車(chē)添加商品時(shí),需要標(biāo)識(shí)和跟蹤某個(gè)用戶(hù),才能知道購(gòu)物車(chē)?yán)锩嬗袔妆緯?shū)。

于是,兩種用于保持 HTTP 連接狀態(tài)的技術(shù)應(yīng)運(yùn)而生,分別是 Cookie 和 Session。

三、Session:身份的標(biāo)識(shí)符

Session,就像你的身份證一樣,是一種在服務(wù)器和客戶(hù)端之間傳遞身份信息的方式。

用戶(hù)登錄生成 Session 的時(shí)序圖如下:

當(dāng)你登錄一個(gè)網(wǎng)站時(shí),服務(wù)器會(huì)生成一個(gè)唯一的 SessionID,并將它存儲(chǔ)在服務(wù)器端,然后將這個(gè) ID 發(fā)送到你的瀏覽器,通常以 Cookie 的形式。

Postman 請(qǐng)求登錄接口,響應(yīng)如下:

postman請(qǐng)求登錄接口

這個(gè) SessionID 就像是你的通行證,每當(dāng)你訪(fǎng)問(wèn)需要登錄的頁(yè)面時(shí),瀏覽器都會(huì)將它發(fā)送給服務(wù)器。

服務(wù)器通過(guò)這個(gè) ID 來(lái)識(shí)別你,就像保安看到你的身份證一樣。

四、Cookie:保持記憶

Cookie 是一個(gè)小小的文本文件,它被存儲(chǔ)在你的瀏覽器中。

正如 Cookie 本身的含義,它就像一個(gè)小甜點(diǎn),作用是讓服務(wù)器能夠在不同的 HTTP 請(qǐng)求之間"記住"你。

當(dāng)你登錄一個(gè)網(wǎng)站時(shí),服務(wù)器已經(jīng)將一些信息存儲(chǔ)在 Cookie 中,比如你的用戶(hù)名或一些用戶(hù)首選項(xiàng)。

然后,每當(dāng)你再次訪(fǎng)問(wèn)這個(gè)網(wǎng)站時(shí),瀏覽器都會(huì)將這些信息發(fā)送給服務(wù)器,這樣服務(wù)器就能夠"認(rèn)識(shí)"你,而不需要你重新登錄。

用戶(hù)通過(guò) Cookie 與應(yīng)用交互的時(shí)序圖如下:

通過(guò)將 SessionId 放在緩存里,每次用戶(hù)交互時(shí)只要帶上 Cookie,應(yīng)用層就可以解析出對(duì)應(yīng)的 SessionId,驗(yàn)證用戶(hù)的身份,獲取用戶(hù)信息。

Postman 交互如下:

postman調(diào)用業(yè)務(wù)接口

有時(shí),為了信息隱私,我們可以在瀏覽器設(shè)置不記錄 Cookie。

但是,這樣我們每次在頁(yè)面交互時(shí)都需要重新登錄,體驗(yàn)就會(huì)比較差。

五、Session與 Cookie 的關(guān)系

PS:這個(gè)是 Web 和后臺(tái)開(kāi)發(fā)面試的??碱},趕快拿小本本記下來(lái) ??

聯(lián)系

如上所示,Session 和 Cookie 之間有著密切的關(guān)系。

通常,服務(wù)器會(huì)將 SessionId 存儲(chǔ)在一個(gè) Cookie 中,并將它發(fā)送給你的瀏覽器或其它設(shè)備。

然后,瀏覽器在每次請(qǐng)求中都會(huì)自動(dòng)包含這個(gè) Cookie,這樣服務(wù)器就能夠識(shí)別你的 SessionId,從而知道你是誰(shuí)。

所以,你可以將 Session 看作是服務(wù)器的身份驗(yàn)證標(biāo)識(shí),而 Cookie 則是瀏覽器/用戶(hù)設(shè)備的記憶工具,用于保存一些有關(guān)你的信息。

區(qū)別

那么,Session和 Cookie 有什么不同呢?

(1) 訪(fǎng)問(wèn)機(jī)制

Cookie 通過(guò)檢查客戶(hù)端的用戶(hù)“通行證”來(lái)確定用戶(hù)身份,Session 檢查服務(wù)器的“客戶(hù)檔案表”來(lái)確認(rèn)用戶(hù)狀態(tài)。

(2) 安全程度

不法分子可能會(huì)分析存放在本地的 Cookie 進(jìn)行 Cookie 欺騙,而 Session 是有人登陸或者啟動(dòng)某個(gè)會(huì)話(huà)時(shí)才會(huì)產(chǎn)生,且 Session 是加密和定時(shí)失效的,所以 Session 安全系數(shù)更高。

(3) 會(huì)話(huà)機(jī)制

簡(jiǎn)單來(lái)說(shuō),Session 的隱私度更高,因?yàn)樗臄?shù)據(jù)存儲(chǔ)在服務(wù)器端,用戶(hù)無(wú)法直接修改。

而 Cookie 存儲(chǔ)在用戶(hù)的瀏覽器中,用戶(hù)可以看到和修改它們的內(nèi)容,所以不適合存儲(chǔ)敏感信息。

使用場(chǎng)景方面,Session 通常用于存儲(chǔ)用戶(hù)的登錄狀態(tài)和其他敏感信息,而 Cookie 可以用于存儲(chǔ)一些用戶(hù)首選項(xiàng)或跟蹤用戶(hù)的行為,比如購(gòu)物車(chē)中的商品。

六、小結(jié)

登錄設(shè)備限制

明白了 Cookie 和 Session 的底層邏輯,限制設(shè)備的登錄個(gè)數(shù)是不是就很簡(jiǎn)單了。

我們只需要在登錄時(shí),根據(jù)賬號(hào)密碼,記錄一下當(dāng)前設(shè)備已有的 Session 數(shù)量,就可以控制登錄設(shè)備的個(gè)數(shù)了。

如果要根據(jù)客戶(hù)端類(lèi)型去限制,比如可以允許電腦和手機(jī)同時(shí)在線(xiàn),我們就可以在登錄時(shí)記錄用戶(hù)的設(shè)備類(lèi)型,以此控制每一種設(shè)備類(lèi)型只能有一個(gè) Session。

更進(jìn)一步,如果基于安全考慮,我們可以在登錄時(shí)記錄用戶(hù)的設(shè)備 Id。

比如手機(jī)在通話(huà)框輸入 *#06#,就可以拿到手機(jī)的唯一標(biāo)識(shí)碼 IMEA

每次用戶(hù)用新設(shè)備登錄時(shí),需要先通過(guò)手機(jī)號(hào)或人臉驗(yàn)證,再記錄設(shè)備的 IMEA 碼,以此來(lái)保證登錄設(shè)備的可靠性。

結(jié)語(yǔ)

Session 與 Cookie 是構(gòu)建現(xiàn)代網(wǎng)站的重要組成部分。它們?yōu)橛脩?hù)提供了方便的登錄和個(gè)性化體驗(yàn),同時(shí)也保障了用戶(hù)的隱私和安全。

通過(guò)深入理解這兩者的原理和用法,我們可以更好地構(gòu)建安全、高效的網(wǎng)絡(luò)應(yīng)用程序。

希望這篇文章讓你對(duì) Session與 Cookie 有了更清晰的認(rèn)識(shí),如果大家有任何問(wèn)題或想要了解更多,請(qǐng)隨時(shí)留言。

責(zé)任編輯:趙寧寧 來(lái)源: xin猿意碼
相關(guān)推薦

2025-01-03 09:39:04

2025-04-09 05:00:00

CookieSession服務(wù)器

2014-08-18 09:31:15

2016-09-06 22:05:41

HttpCookieWeb

2009-08-05 18:30:36

Session和CooASP.NET表單

2020-02-27 15:12:29

cookiesession加密

2019-11-06 17:30:57

cookiesessionWeb

2024-10-09 15:43:49

2020-11-05 09:26:55

Cookie和Sess

2019-05-15 15:10:12

Tomcat Session Cookie

2019-06-11 14:45:25

2019-11-07 10:37:36

CookieSessionToken

2024-04-26 12:45:39

JWTCookieSession

2023-12-04 10:36:46

SessionCookie

2021-08-26 06:58:14

CookieSession應(yīng)用

2023-12-11 11:29:35

2023-10-24 09:07:14

CookieSessionHTTP

2023-10-27 08:23:10

CookieWeb存儲(chǔ)

2021-08-09 08:53:30

HTTP狀態(tài)化協(xié)議

2021-09-05 18:26:42

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)