前言
本博主將用CSDN記錄軟件開(kāi)發(fā)求學(xué)之路上親身所得與所學(xué)的心得與知識(shí),有興趣的小伙伴可以關(guān)注博主!也許一個(gè)人獨(dú)行,可以走的很快,但是一群人結(jié)伴而行,才能走的更遠(yuǎn)!
一、概述
當(dāng)涉及到Web開(kāi)發(fā)和用戶身份驗(yàn)證時(shí),Cookie和Session是兩個(gè)常見(jiàn)的概念。它們?cè)诖鎯?chǔ)和管理用戶狀態(tài)方面起著重要作用。、
二、Cookie和Session的區(qū)別與聯(lián)系
Cookie和Session是Web開(kāi)發(fā)中常用的機(jī)制,用于存儲(chǔ)和管理用戶的身份驗(yàn)證和狀態(tài)信息。它們之間的主要區(qū)別如下:
-
存儲(chǔ)位置:
- Cookie:Cookie是存儲(chǔ)在用戶的瀏覽器中的小段數(shù)據(jù)。每個(gè)Cookie都有一個(gè)名稱和值,并且由服務(wù)器發(fā)送給瀏覽器,在用戶的每個(gè)請(qǐng)求中被瀏覽器自動(dòng)包含在HTTP頭中。
- Session:Session是存儲(chǔ)在服務(wù)器端的數(shù)據(jù)結(jié)構(gòu)。服務(wù)器為每個(gè)用戶創(chuàng)建一個(gè)唯一的會(huì)話,并將會(huì)話ID存儲(chǔ)在Cookie中或通過(guò)URL參數(shù)傳遞給客戶端。會(huì)話數(shù)據(jù)存儲(chǔ)在服務(wù)器的內(nèi)存或持久化存儲(chǔ)中。
-
存儲(chǔ)容量:
- Cookie:每個(gè)域名下的Cookie數(shù)量和總大小都是有限制的。通常,每個(gè)域名最多可以存儲(chǔ)幾十個(gè)Cookie,每個(gè)Cookie的大小不能超過(guò)幾KB。
- Session:在服務(wù)器端存儲(chǔ)Session數(shù)據(jù)的容量通常較大,可以存儲(chǔ)更多的信息,受服務(wù)器資源和配置的限制。
-
安全性:
- Cookie:Cookie可以設(shè)置安全標(biāo)志(secure flag)和HTTP-only標(biāo)志(HTTP-only flag)來(lái)增加安全性。安全標(biāo)志可以確保Cookie僅在使用加密協(xié)議(如HTTPS)時(shí)傳輸,而HTTP-only標(biāo)志可以防止JavaScript訪問(wèn)Cookie,從而減少跨站點(diǎn)腳本攻擊(XSS)的風(fēng)險(xiǎn)。
- Session:由于Session數(shù)據(jù)存儲(chǔ)在服務(wù)器端,相對(duì)于Cookie,Session更難受到客戶端篡改和攻擊。
-
時(shí)效性:
- Cookie:Cookie可以設(shè)置一個(gè)過(guò)期時(shí)間,在此之前瀏覽器會(huì)持續(xù)保存它,并在用戶下次訪問(wèn)網(wǎng)站時(shí)發(fā)送回服務(wù)器??梢詣?chuàng)建持久性Cookie(有過(guò)期時(shí)間)和會(huì)話Cookie(在用戶關(guān)閉瀏覽器后過(guò)期)。
- Session:Session可以有一個(gè)過(guò)期時(shí)間,或者在用戶關(guān)閉瀏覽器時(shí)自動(dòng)銷毀。會(huì)話Cookie通常用于存儲(chǔ)會(huì)話ID,而不是實(shí)際的會(huì)話數(shù)據(jù)。
-
跨設(shè)備支持:
- Cookie:Cookie存儲(chǔ)在用戶的瀏覽器中,因此可以在不同設(shè)備上使用同一瀏覽器時(shí)共享??梢酝ㄟ^(guò)在瀏覽器中同步Cookie來(lái)實(shí)現(xiàn)跨設(shè)備的狀態(tài)共享。
- Session:Session數(shù)據(jù)存儲(chǔ)在服務(wù)器端,與設(shè)備無(wú)關(guān)。無(wú)論用戶使用哪個(gè)設(shè)備訪問(wèn)網(wǎng)站,服務(wù)器都可以通過(guò)會(huì)話ID來(lái)檢索和管理用戶的會(huì)話數(shù)據(jù)。
需要注意的是,Cookie和Session通常一起使用,通過(guò)Cookie中的唯一標(biāo)識(shí)符來(lái)關(guān)聯(lián)和管理服務(wù)器端的Session數(shù)據(jù)。Cookie提供了一種持久性存儲(chǔ)和跨設(shè)備共享的方式,而Session提供了在服務(wù)器端存儲(chǔ)和管理用戶狀態(tài)的機(jī)制。理解Cookie和Session的區(qū)別對(duì)于開(kāi)發(fā)安全和可靠的Web應(yīng)用程序至關(guān)重要。
三、登陸案例講解
1、以登錄案例講解Cookie的使用過(guò)程
- 首先用戶在客戶端瀏覽器向服務(wù)器首次發(fā)起登陸請(qǐng)求
- 登陸成功后,服務(wù)端會(huì)把登陸的用戶信息設(shè)置在
cookie
中(即set-cookie
),并將cookie
返回給客戶端瀏覽器 - 客戶端瀏覽器接收到
cookie
請(qǐng)求后,會(huì)把cookie
保存到本地(可能是內(nèi)存,也可能是磁盤,看具體使用情況而定) - 以后再次訪問(wèn)該
web
應(yīng)用時(shí),客戶端瀏覽器就會(huì)把本地的cookie
帶上,這樣服務(wù)端就能根據(jù)cookie
獲得用戶信息了
弊端:服務(wù)端把用戶信息(用戶名、用戶密碼)設(shè)置在cookie里返回給客戶端,讓客戶端自己保存,也就是用戶可以在客戶端看到自己的密碼。如果你的電腦被盜了,別人也可以在cookie里看到你的用戶名和密碼,這存在著極大的信息泄露安全風(fēng)險(xiǎn)?。?br> 因此,引進(jìn)了session登錄
2、以登陸案例講解 Session 的使用過(guò)程
- 首先用戶在客戶端瀏覽器發(fā)起登陸請(qǐng)求。
- 登陸成功后,服務(wù)端會(huì)把用戶信息保存在服務(wù)端,并返回一個(gè)唯一的
session
標(biāo)識(shí)(即sessionID
)通過(guò)設(shè)置在cookie
里返回給客戶端瀏覽器 - 客戶端瀏覽器會(huì)把這個(gè)唯一的
session
標(biāo)識(shí)保存在起來(lái) - 以后再次訪問(wèn) web 應(yīng)用時(shí),客戶端瀏覽器會(huì)把這個(gè)唯一的
session
標(biāo)識(shí)帶上,這樣服務(wù)端就能根據(jù)這個(gè)唯一標(biāo)識(shí)找到用戶信息。
看到這里可能會(huì)引起疑問(wèn):把唯一的 session 標(biāo)識(shí)返回給客戶端瀏覽器,然后保存起來(lái),以后訪問(wèn)時(shí)帶上,這難道不是 cookie 嗎?
沒(méi)錯(cuò),session 只是一種會(huì)話機(jī)制,在許多 web 應(yīng)用中,session 機(jī)制就是通過(guò) cookie 來(lái)實(shí)現(xiàn)的。也就是說(shuō)它只是使用(利用)了cookie 的功能,并不是使用 cookie完成會(huì)話保存。與 cookie 在保存客戶端保存會(huì)話的機(jī)制相反,session 通過(guò)cookie的功能把會(huì)話信息保存到了服務(wù)端。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-627868.html
四、總結(jié)
舉個(gè)小例子說(shuō)明Cookie和Session之間的區(qū)別和聯(lián)系
假如一個(gè)咖啡店有喝五杯贈(zèng)一杯咖啡的優(yōu)惠,但是一次性消費(fèi)5杯咖啡的客人很少,這時(shí)就需要某種方式來(lái)記錄某位顧客的消費(fèi)數(shù)量。無(wú)外乎下面的幾種方案文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-627868.html
- 該店的店員很厲害,能記住每位顧客的消費(fèi)數(shù)量,只要顧客一走進(jìn)咖啡店,店員就知道該怎么對(duì)待了。這種做法就是協(xié)議本身支持狀態(tài)。但是http協(xié)議本身是無(wú)狀態(tài)的。
- 發(fā)給顧客一張卡片,上面記錄著消費(fèi)的數(shù)量,一般還有個(gè)有效期限。每次消費(fèi)時(shí),如果顧客出示這張卡片,則此次消費(fèi)就會(huì)與以前或以后的消費(fèi)相聯(lián)系起來(lái)。這種做法就是在客戶端保持狀態(tài),也就是cookie,顧客就相當(dāng)于瀏覽器,也就是Cookie登錄。
- 發(fā)給顧客一張會(huì)員卡,除了卡號(hào)之外什么信息也不紀(jì)錄,每次消費(fèi)時(shí),如果顧客出示該卡片,則店員在店里的記錄本上找到這個(gè)卡號(hào)對(duì)應(yīng)的記錄添加一些消費(fèi)信息。這種做法就是在服務(wù)器端保持狀態(tài),也就是Session登錄。
到了這里,關(guān)于Cookie vs Session:Web開(kāi)發(fā)中的身份驗(yàn)證之爭(zhēng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!