個(gè)人網(wǎng)站建設(shè)如何賺錢軟文營(yíng)銷ppt
💐個(gè)人主頁:初晴~
📚相關(guān)專欄:計(jì)算機(jī)網(wǎng)絡(luò)那些事
一、Cookie是什么?
Cookie的存在主要是為了解決HTTP協(xié)議的無狀態(tài)性問題,即協(xié)議本身無法記住用戶之前的操作。
- "?狀態(tài)" 的含義指的是:
默認(rèn)情況下 HTTP 協(xié)議的客?端和服務(wù)器之間的這次通信,和下次通信之間沒有直接的聯(lián)系
但是實(shí)際開發(fā)中,我們很多時(shí)候是需要知道請(qǐng)求之間的關(guān)聯(lián)關(guān)系的
例如登陸?站成功后, 第?次訪問的時(shí)候服務(wù)器就能知道該請(qǐng)求是否是已經(jīng)登陸過了
上述圖中的 "令牌" 通常就存儲(chǔ)在 Cookie 字段中。
?如去醫(yī)院掛號(hào)1. 看病之前先掛號(hào). 掛號(hào)時(shí)候需要提供?份證號(hào), 同時(shí)得到了?張 "就診卡", 這個(gè)就診卡就相當(dāng)于患者的 "令牌".2. 后續(xù)去各個(gè)科室進(jìn)?檢查, 診斷, 開藥等操作, 都不必再出??份證了, 只要憑就診卡即可識(shí)別出當(dāng)前患者的?份.3. 看完病了之后, 不想要就診卡了, 就可以注銷這個(gè)卡. 此時(shí)患者的?份和就診卡的關(guān)聯(lián)就銷毀了. (類似于?站的注銷操作)4. ?來看病, 可以辦?張新的就診卡, 此時(shí)就得到了?個(gè)新的 "令牌"
此時(shí)在服務(wù)器這邊就需要記錄"令牌"信息, 以及令牌對(duì)應(yīng)的??信息, 這個(gè)就是 Session 機(jī)制所做的?作
二、Session是什么?
Session(會(huì)話)是Web開發(fā)中用于管理用戶狀態(tài)的一種機(jī)制。它允許服務(wù)器在多個(gè)頁面請(qǐng)求或多個(gè)瀏覽器會(huì)話之間保持用戶的狀態(tài)信息。
所謂的會(huì)話,其實(shí)就可以理解為 “對(duì)話”
在計(jì)算機(jī)領(lǐng)域,會(huì)話是?個(gè)客?與服務(wù)器之間的不中斷的請(qǐng)求響應(yīng)。對(duì)客?的每個(gè)請(qǐng)求,服務(wù)器能夠識(shí)別出請(qǐng)求來?于同?個(gè)客?。當(dāng)?個(gè)未知的客?向Web應(yīng)?程序發(fā)送第?個(gè)請(qǐng)求時(shí)就開始了?個(gè)會(huì)話。當(dāng)客?明確結(jié)束會(huì)話或服務(wù)器在?個(gè)時(shí)限內(nèi)沒有接受到客?的任何請(qǐng)求時(shí),會(huì)話就結(jié)束了
?如我們打客服電話每次打客服電話,是?個(gè)會(huì)話. 掛斷電話,會(huì)話就結(jié)束了下次再打客服電話,?是?個(gè)新的會(huì)話如果我們?時(shí)間不說話,沒有新的請(qǐng)求,會(huì)話也會(huì)結(jié)束
服務(wù)器同?時(shí)刻收到的請(qǐng)求是很多的。服務(wù)器需要清楚的區(qū)分每個(gè)請(qǐng)求是屬于哪個(gè)??,也就是屬于哪個(gè)會(huì)話,就需要在服務(wù)器這邊記錄每個(gè)會(huì)話以及與??的信息的對(duì)應(yīng)關(guān)系。
- Session是服務(wù)器為了保存??信息?創(chuàng)建的?個(gè)特殊的對(duì)象
Session的本質(zhì)就是?個(gè) "哈希表", 存儲(chǔ)了?些鍵值對(duì)結(jié)構(gòu). Key 就是SessionID, Value 就是??信息(??信息可以根據(jù)需求靈活設(shè)計(jì))
SessionId 是由服務(wù)器?成的?個(gè) "唯?性字符串",從 Session 機(jī)制的?度來看,這個(gè)唯?性字符串稱為 " SessionId "。但是站在整個(gè)登錄流程中看待,也可以把這個(gè)唯?性字符串稱為 " token "。
上述例?中的令牌ID,就可以看做是SessionId,只不過令牌除了ID之外,還會(huì)帶?些其他信息,?如時(shí)間、簽名等
1. 當(dāng)??登陸的時(shí)候,服務(wù)器在 Session 中新增?個(gè)新記錄,并把 sessionId返回給客?端?(通過 HTTP 響應(yīng)中的 Set-Cookie 字段返回)2. 客?端后續(xù)再給服務(wù)器發(fā)送請(qǐng)求的時(shí)候,需要在請(qǐng)求中帶上 sessionId。(通過 HTTP 請(qǐng)求中的 Cookie 字段帶上)3. 服務(wù)器收到請(qǐng)求之后,根據(jù)請(qǐng)求中的 sessionId在 Session 信息中獲取到對(duì)應(yīng)的??信息,?再進(jìn)?后續(xù)操作。找不到則重新創(chuàng)建Session,并把SessionID返回
Session 默認(rèn)是保存在內(nèi)存中的。如果重啟服務(wù)器則 Session 數(shù)據(jù)就會(huì)丟失
三、Cookie 與 Session 的區(qū)別
1、存儲(chǔ)位置:
- Cookie:存儲(chǔ)在客戶端(用戶的瀏覽器)中,通常以鍵值對(duì)的形式存在。
- Session:存儲(chǔ)在服務(wù)器端,客戶端通常只存儲(chǔ)一個(gè)Session ID,用于標(biāo)識(shí)對(duì)應(yīng)的服務(wù)器端Session。
2、存儲(chǔ)大小和數(shù)量限制:
- Cookie:每個(gè)Cookie的大小一般限制在4KB左右,每個(gè)域名下可以存儲(chǔ)的Cookie數(shù)量有限(大約20個(gè))。
- Session:理論上沒有嚴(yán)格的大小限制,但受到服務(wù)器存儲(chǔ)空間的限制。Session可以存儲(chǔ)更多的數(shù)據(jù)。
3、生命周期:
- Cookie:可以設(shè)置過期時(shí)間,瀏覽器會(huì)在過期后刪除Cookie,或者用戶可以手動(dòng)清除。
- Session:依賴于服務(wù)器的配置,通常在用戶關(guān)閉瀏覽器或Session超時(shí)后結(jié)束。
4、安全性:
- Cookie:由于存儲(chǔ)在客戶端,更容易受到跨站腳本攻擊(XSS)和跨站請(qǐng)求偽造(CSRF)等攻擊,安全性較低。
- Session:由于存儲(chǔ)在服務(wù)器端,不易被篡改,相對(duì)更安全。但是,Session ID的傳輸需要安全保護(hù),以防止Session劫持。
5、使用場(chǎng)景:
- Cookie:適用于存儲(chǔ)不太敏感的數(shù)據(jù),如用戶偏好設(shè)置、會(huì)話標(biāo)識(shí)符等。
- Session:適用于存儲(chǔ)敏感數(shù)據(jù),如用戶的登錄狀態(tài)、購物車內(nèi)容等。
6、傳輸:
- Cookie:每次HTTP請(qǐng)求都會(huì)自動(dòng)包含在請(qǐng)求頭中發(fā)送給服務(wù)器,增加了HTTP請(qǐng)求的大小。
- Session:只有Session ID在客戶端和服務(wù)器之間傳遞,實(shí)際的Session數(shù)據(jù)存儲(chǔ)在服務(wù)器端,減少了網(wǎng)絡(luò)傳輸。
7、控制權(quán):
- Cookie:由客戶端瀏覽器控制,用戶可以禁用Cookie或手動(dòng)刪除。
- Session:由服務(wù)器控制,服務(wù)器可以創(chuàng)建、修改和刪除Session。
8、跨域訪問:
- Cookie:可以設(shè)置為跨域訪問,允許多個(gè)相關(guān)聯(lián)的域名訪問相同的Cookie。
- Session:通常局限于創(chuàng)建它的域名,除非通過特定的機(jī)制(如Session聯(lián)邦)來實(shí)現(xiàn)跨域Session共享。
Cookie 和 Session之間主要是通過 SessionId 關(guān)聯(lián)起來的,SessionId 是 Cookie 和 Session 之間的橋梁
注意:Cookie 和 Session 經(jīng)常會(huì)在?起配合使?,但是不是必須配合:
- 完全可以? Cookie 來保存?些數(shù)據(jù)在客?端。這些數(shù)據(jù)不?定是???份信息,也不?定是 SessionId
- Session 中的sessionId 也不需要?得通過 Cookie/Set-Cookie 傳遞,?如通過URL傳遞
那么本篇文章就到此為止了,如果覺得這篇文章對(duì)你有幫助的話,可以點(diǎn)一下關(guān)注和點(diǎn)贊來支持作者哦。如果有什么講的不對(duì)的地方歡迎在評(píng)論區(qū)指出,希望能夠和你們一起進(jìn)步?