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