詳解COOKIE和SESSION關(guān)系和區(qū)別-創(chuàng)新互聯(lián)

在技術(shù)面試中,經(jīng)常被問到“說說Cookie和Session的區(qū)別”,大家都知道,Session是存儲在服務(wù)器端的,Cookie是存儲在客戶端的,然而如果讓你更詳細(xì)地說明,你能說出幾點(diǎn)?今天個推君就和大家談?wù)劇癈ookie和Session”的那些事兒。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的忻城網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

Cookie是什么?

從它的詞語本身含義來看:

Cookie:

n. 餅干;小甜點(diǎn)

N-COUNT A cookie is a piece of computer software which enables a website you have visited to recognize you if you visit it again. 再次訪問某一網(wǎng)站時,能令網(wǎng)站識別訪問人的計(jì)算機(jī)軟件。

Cookie是客戶端保存用戶信息的一種機(jī)制,用來記錄用戶的一些信息。如何識別特定的客戶呢?cookie就可以做到。每次HTTP請求時,客戶端都會發(fā)送相應(yīng)的Cookie信息到服務(wù)端。它的過期時間可以任意設(shè)置,如果你不主動清除它,在很長一段時間里面都可以保留著,即便這之間你把電腦關(guān)機(jī)了。

既然它是存儲在客戶端的,換句話說通過某些手法我就可以篡改本地存儲的信息來欺騙服務(wù)端的某些策略,那該怎么辦呢?我們先按下不表,來看看另外一位朋友 —— Session。

Session是什么?

同樣,我們先來看看釋義:

Session:

普通釋義:n. 會議;(法庭的)開庭;(議會等的)開會;學(xué)期;講習(xí)會

計(jì)算機(jī)釋義:會話

Session是在無狀態(tài)的HTTP協(xié)議下,服務(wù)端記錄用戶狀態(tài)時用于標(biāo)識具體用戶的機(jī)制。它是在服務(wù)端保存的用來跟蹤用戶的狀態(tài)的數(shù)據(jù)結(jié)構(gòu),可以保存在文件、數(shù)據(jù)庫或者集群中。在瀏覽器關(guān)閉后這次的Session就消失了,下次打開就不再擁有這個Session。其實(shí)并不是Session消失了,而是Session ID變了,服務(wù)器端可能還是存著你上次的Session ID及其Session 信息,只是他們是無主狀態(tài),也許一段時間后會被刪除。

實(shí)際上Cookie與Session都是會話的一種方式。它們的典型使用場景比如“購物車”,當(dāng)你點(diǎn)擊下單按鈕時,服務(wù)端并不清楚具體用戶的具體操作,為了標(biāo)識并跟蹤該用戶,了解購物車中有幾樣物品,服務(wù)端通過為該用戶創(chuàng)建Cookie/Session來獲取這些信息。

如果你的站點(diǎn)是多節(jié)點(diǎn)部署,使用Nginx做負(fù)載均衡,那么有可能會出現(xiàn)Session丟失的情況(比如,忽然就處于未登錄狀態(tài))。這時可以使用IP負(fù)載均衡(IP綁定 ip_hash,每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決Session的問題),或者將Session信息存儲在集群中。在大型的網(wǎng)站中,一般會有專門的Session服務(wù)器集群,用來保存用戶會話,這時可以使用緩存服務(wù)比如Memcached或者Redis之類的來存放Session。

目前大多數(shù)的應(yīng)用都是用 Cookie 實(shí)現(xiàn)Session跟蹤的。第一次創(chuàng)建Session時,服務(wù)端會通過在HTTP協(xié)議中反饋到客戶端,需要在 Cookie 中記錄一個Session ID,以便今后每次請求時都可分辨你是誰。有人問,如果客戶端的瀏覽器禁用了 Cookie 怎么辦?建議使用URL重寫技術(shù)進(jìn)行會話跟蹤,即每次HTTP交互,URL后面都被附加上諸如 sid=xxxxx 的參數(shù),以便服務(wù)端依此識別用戶。

換個姿勢~

客戶端和服務(wù)端之間的通信交流,可以這樣簡單理解:

比如當(dāng)你在個推技術(shù)分享沙龍上覺得某位講師講得很好,在會后問了他幾個問題,他對你這些問題進(jìn)行了回答,這就是一個會話。但這個講師太受歡迎,于是工作人員收集問題,并給每個提問者一個號碼牌,講師按照號碼牌依次給出相應(yīng)解答并告訴相應(yīng)的人。這就是Session。一段時間后,當(dāng)你再次遇見這位講師,他發(fā)現(xiàn)你身上有上次回復(fù)你的答案,知曉你是那個好學(xué)的程序猿。于是你欣喜若狂,哇塞,講師居然認(rèn)出我了,這就是Cookie,你的小甜點(diǎn)??蛻舳撕帽嚷犝n的技術(shù)愛好者,服務(wù)端就是這位講師。

詳解COOKIE和SESSION關(guān)系和區(qū)別

Cookie還可以在一些方便用戶的場景下使用。比如你某次登陸過一個網(wǎng)站,下次登錄的時候不想再次輸入賬號了,怎么辦?這個信息可以被寫到Cookie里面,當(dāng)訪問網(wǎng)站時,網(wǎng)站頁面的腳本可以讀取這個信息,自動填寫用戶名,方便用戶使用,給用戶一點(diǎn)甜頭。

總結(jié)語:

1、Cookie 在客戶端(瀏覽器),Session 在服務(wù)器端。

2、Cookie的安全性一般,他人可通過分析存放在本地的Cookie并進(jìn)行Cookie欺騙。在安全性第一的前提下,選擇Session更優(yōu)。重要交互信息比如權(quán)限等就要放在Session中,一般的信息記錄放Cookie就好了。

3、單個Cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個站點(diǎn)最多保存20個Cookie。

4、Session 可以放在 文件、數(shù)據(jù)庫或內(nèi)存中,比如在使用Node時將Session保存在redis中。由于一定時間內(nèi)它是保存在服務(wù)器上的,當(dāng)訪問增多時,會較大地占用服務(wù)器的性能??紤]到減輕服務(wù)器性能方面,應(yīng)當(dāng)適時使用Cookie。

5、Session 的運(yùn)行依賴Session ID,而 Session ID 是存在 Cookie 中的,也就是說,如果瀏覽器禁用了 Cookie,Session 也會失效(但是可以通過其它方式實(shí)現(xiàn),比如在 url 中傳遞 Session ID)。

6、用戶驗(yàn)證這種場合一般會用 Session。因此,維持一個會話的核心就是客戶端的唯一標(biāo)識,即Session ID。

題外話,那么話說Session Cookie能被篡改么?

理論上可以,只要改變了連接時的Session ID 就可以了~

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章名稱:詳解COOKIE和SESSION關(guān)系和區(qū)別-創(chuàng)新互聯(lián)
鏈接URL:http://muchs.cn/article34/csjise.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、做網(wǎng)站、微信公眾號、ChatGPT、定制網(wǎng)站、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)