【轉(zhuǎn)】session和cookie的區(qū)別

前言

HTTP是一種無狀態(tài)的協(xié)議,為了分辨鏈接是誰發(fā)起的,需自己去解決這個問題。不然有些情況下即使是同一個網(wǎng)站每打開一個頁面也都要登錄一下。而Session和Cookie就是為解決這個問題而提出來的兩個機制。

應(yīng)用場景

登錄網(wǎng)站,今輸入用戶名密碼登錄了,第二天再打開很多情況下就直接打開了。這個時候用到的一個機制就是cookie。

session一個場景是購物車,添加了商品之后客戶端處可以知道添加了哪些商品,而服務(wù)器端如何判別呢,所以也需要存儲一些信息就用到了session。

1.Cookie

通俗講,是訪問某些網(wǎng)站后在本地存儲的一些網(wǎng)站相關(guān)信息,下次訪問時減少一些步驟。更準(zhǔn)確的說法是:Cookies是服務(wù)器在本地機器上存儲的小段文本并隨每一個請求發(fā)送至同一服務(wù)器,是在客戶端保持狀態(tài)的方案。

Cookie的主要內(nèi)容包括:名字,值,過期時間,路徑和域。使用Fiddler抓包就可以看見,比方說我們打開百度的某個網(wǎng)站可以看到Headers包括Cookie,如下:

BIDUPSID: 9D2194F1CB8D1E56272947F6B0E5D47E

PSTM: 1472480791

BAIDUID: 3C64D3C3F1753134D13C33AFD2B38367:FG

ispeed_lsm: 2

MCITY: -131:

pgv_pvi: 3797581824

pgv_si: s9468756992

BDUSS: JhNXVoQmhPYTVENEdIUnQ5S05xcHZMMVY5QzFRNVh5SzZoV0xMVDR6RzV-bEJZSVFBQUFBJCQAAAAAAAAAAAEAAACteXsbYnRfY2hpbGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALlxKVi5cSlYZj

BD_HOME: 1

H_PS_PSSID: 1423_21080_17001_21454_21408_21530_21377_21525_21193_21340

BD_UPN: 123253

sug: 3

sugstore: 0

ORIGIN: 0

bdime: 0

key, value形式。過期時間可設(shè)置的,如不設(shè),則瀏覽器關(guān)掉就消失了,存儲在內(nèi)存當(dāng)中,否則就按設(shè)置的時間來存儲在硬盤上的,過期后自動清除,比方說開關(guān)機關(guān)閉再打開瀏覽器后他都會還存在,前者稱之為Session cookie 又叫 transient cookie,后者稱之為Persistent cookie 又叫 permenent cookie。路徑和域就是對應(yīng)的域名,a網(wǎng)站的cookie自然不能給b用。

2.Session

存在服務(wù)器的一種用來存放用戶數(shù)據(jù)的類HashTable結(jié)構(gòu)。

瀏覽器第一次發(fā)送請求時,服務(wù)器自動生成了一HashTable和一Session ID來唯一標(biāo)識這個HashTable,并將其通過響應(yīng)發(fā)送到瀏覽器。瀏覽器第二次發(fā)送請求會將前一次服務(wù)器響應(yīng)中的Session ID放在請求中一并發(fā)送到服務(wù)器上,服務(wù)器從請求中提取出Session ID,并和保存的所有Session ID進行對比,找到這個用戶對應(yīng)的HashTable。

一般這個值會有個時間限制,超時后毀掉這個值,默認(rèn)30分鐘。

當(dāng)用戶在應(yīng)用程序的 Web頁間跳轉(zhuǎn)時,存儲在 Session 對象中的變量不會丟失而是在整個用戶會話中一直存在下去。

Session的實現(xiàn)方式和Cookie有一定關(guān)系。建立一個連接就生成一個session id,打開幾個頁面就好幾個了,這里就用到了Cookie,把session id存在Cookie中,每次訪問的時候?qū)ession id帶過去就可以識別了.

區(qū)別

存儲數(shù)據(jù)量方面:session 能夠存儲任意的 java 對象,cookie 只能存儲 String 類型的對象

一個在客戶端一個在服務(wù)端。因Cookie在客戶端所以可以編輯偽造,不是十分安全。

Session過多時會消耗服務(wù)器資源,大型網(wǎng)站會有專門Session服務(wù)器,Cookie存在客戶端沒問題。

域的支持范圍不一樣,比方說a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解決這個問題的辦法是JSONP或者跨域資源共享。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容