對(duì)于cookie和session的總結(jié)

最近項(xiàng)目在調(diào)試性能問題,關(guān)于cookie和session的問題進(jìn)行了討論,所以在這里分別解釋一下他們各自的用途以及他們的一些區(qū)別
一、cookie
1.什么是cookie?
cookie是服務(wù)器發(fā)給客戶端的特殊信息,是儲(chǔ)存在用戶本地終端上的數(shù)據(jù),每次請(qǐng)求都會(huì)帶有cookie信息。簡單來說,cookie就是服務(wù)器暫時(shí)存放在你的電腦里的資料(.txt格式的文本文件),好讓服務(wù)器用來辨認(rèn)你的計(jì)算機(jī)。
2.cookie機(jī)制:
客戶端請(qǐng)求服務(wù)器時(shí),如果服務(wù)器需要記錄用戶狀態(tài),就在用戶請(qǐng)求時(shí)發(fā)送一段cookie信息??蛻舳藶g覽器保存改cookie信息,當(dāng)用戶再次再次訪問該網(wǎng)站時(shí),瀏覽器會(huì)把cookie作為請(qǐng)求信息的一部分提交給服務(wù)器。服務(wù)器檢查cookie內(nèi)容,以此來判斷用戶狀態(tài),服務(wù)器還會(huì)對(duì)cookie信息進(jìn)行維護(hù),必要時(shí)會(huì)對(duì)cookie內(nèi)容進(jìn)行修改。
3.cookie的類型:
cookie總時(shí)由用戶客戶端進(jìn)行保存的(一般是瀏覽器),按其存儲(chǔ)位置可分為:內(nèi)存式cookie和硬盤式cookie。
內(nèi)存式cookie存儲(chǔ)在內(nèi)存中,瀏覽器關(guān)閉后就會(huì)消失,由于其存儲(chǔ)時(shí)間較短,因此也被稱為非持久cookie或會(huì)話cookie。
硬盤式cookie保存在硬盤中,其不會(huì)隨瀏覽器的關(guān)閉而消失,除非用戶手工清理或到了過期時(shí)間。由于硬盤式cookie存儲(chǔ)時(shí)間是長期的,因此也被稱為持久cookie。
二、session(解釋一下其中的幾點(diǎn),更多詳細(xì)的內(nèi)容大家可以自行百度)
1.什么是session
簡單來講,session是另一種記錄客戶狀態(tài)的機(jī)制,session保存在服務(wù)器上??蛻舳藶g覽器訪問服務(wù)器的時(shí)候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上。這就是session。客戶端瀏覽器再次訪問時(shí)只需要從該session中查找該客戶的狀態(tài)就可以了。
2.session機(jī)制:
不同語言實(shí)現(xiàn)的應(yīng)用程序有不同創(chuàng)建session的方法,而在Java中是通過調(diào)用HttpRequest的getSession方法(使用true作為參數(shù))創(chuàng)建的。在創(chuàng)建了session的同時(shí),服務(wù)器會(huì)為該session生成唯一的session?id,而這個(gè)session?id在隨后的請(qǐng)求中會(huì)被用來重新獲得已經(jīng)創(chuàng)建的session;在session被創(chuàng)建之后,就可以調(diào)用session相關(guān)的方法往session中增加內(nèi)容了,而這些內(nèi)容只會(huì)保存在服務(wù)器中,發(fā)到客戶端的只有session?id;當(dāng)客戶端再次發(fā)送請(qǐng)求的時(shí)候,會(huì)將這個(gè)session?id帶上,服務(wù)器接受到請(qǐng)求之后就會(huì)依據(jù)session?id找到相應(yīng)的session,從而再次使用之。正式這樣一個(gè)過程,用戶的狀態(tài)也就得以保持了。
3.bizjsession是什么?(在討論中發(fā)現(xiàn)有bizjsession這個(gè)字段,所以做一下說明)
每一個(gè)session都有一個(gè)id來作為標(biāo)識(shí),這個(gè)id會(huì)傳到客戶端,每次客戶端請(qǐng)求都會(huì)把這個(gè)id傳到服務(wù)器,服務(wù)器根據(jù)id來匹配這次請(qǐng)求應(yīng)該使用哪個(gè)session。bizjsessionid就是客戶端用來保存sessionid的變量,主要是針對(duì)java實(shí)現(xiàn)的web容器,沒有研究過其他語言是用什么變量來保存的。一般對(duì)于web應(yīng)用來說,客戶端變量都會(huì)保存在cookie 中,bizjsessionid也不例外。不過與一般的cookie變量不同,bizjsessionid是保存在內(nèi)存cookie中的,在一般的cookie文件中是看不到它的影子的。
三、cookie和session的區(qū)別
1.session保存在服務(wù)器,客戶端不知道其中的信息;cookie保存在客戶端,服務(wù)端可以知道其中的信息,所以session的安全性要高于cookie。
2.session中保存的是對(duì)象,cookie中保存的是字符串。
3.session是保管在服務(wù)器端的,每個(gè)用戶都會(huì)產(chǎn)生一個(gè)session。假如并發(fā)訪問的用戶十分多,會(huì)產(chǎn)生十分多的session,耗費(fèi)大量的內(nèi)存。因而像Google、Baidu、Sina這樣并發(fā)訪問量極高的網(wǎng)站,是不太可能運(yùn)用session來追蹤客戶會(huì)話的。而cookie保管在客戶端,不占用服務(wù)器資源。假如并發(fā)閱讀的用戶十分多,cookie是很好的選擇。關(guān)于Google、Baidu、Sina來說,cookie或許是唯一的選擇。
4.cookie支持跨域名訪問,而session則不會(huì)支持跨域名訪問。
