一個小例子:瀏覽器
星巴克開始優惠活動,每消費10杯咖啡,會免費贈送1杯。考慮到一我的一次性消費10杯咖啡幾乎不可能,因此須要採起某種方式來記錄顧客的消費數量。安全
解決方案:服務器
1,店員很厲害,每一個顧客的消費記錄都記得一清二楚;cookie
2,分給顧客一張卡片,每消費一次記錄一次;session
3,發給顧客一張卡片,上面有卡號,顧客每消費一次,由店員在操做機上記錄一次。性能
從生活上來看,方案一的可執行性幾乎爲0,方案二和方案三咱們都見過。網站
而方案二和三正是對應的客戶端記錄和服務端記錄。與之相對應的正式cookie和session。編碼
好了,咱們進入正題。code
咱們知道HTTP協議是一種無狀態的協議,數據一旦交換完畢,客戶端與服務端的鏈接就會關閉,再次交換數據須要從新創建鏈接。而咱們有時候又有跟蹤會話的需求,因此必須引入一種機制:cookie。資源
什麼是cookie?
cookie是一小段文本信息,它記錄了一個用戶訪問某個網站時的用戶信息。
cookie機制
cookie機制其實在前面已經說了,但cookie須要解決三個問題:分發、內容和使用。
cookie的分發是經過擴展HTTP協議來實現的,服務器端經過在HTTP的響應由中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。
cookie的內容主要包括名字、值、過時時間、路徑和域。
cookie的使用是由瀏覽器按照必定的原則在後臺自動發送給服務器。瀏覽器檢查全部存儲的cookie,若是某個cookie所聲明的做用範圍大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上發送給服務器。
cookie屬性
name:cookie的名字,一旦建立,名稱不可更改。
value:cookie的值,若是值爲Unicode字符,須要爲字符編碼。若是爲二進制數據,則須要使用BASE64編碼。
maxAge:cookie失效時間,單位秒。若是爲正數,則該cookie在maxAge後失效。若是爲負數,該cookie爲臨時cookie,關閉瀏覽器即失效,瀏覽器也不會以任何形式保存該cookie。若是爲0,表示刪除該cookie。默認爲-1。
secure:該cookie是否僅被使用安全協議傳輸。
path:該cookie的使用路徑。若是設置爲"/sessionWeb/",則只有ContextPath爲「/sessionWeb/」的程序能夠訪問該cookie。若是設置爲「/」,則本域名下ContextPath均可以訪問該cookie。
session機制
session機制是一種服務端的機制,服務器使用一種相似散列表的結構來保存信息。
當程序須要爲某個客戶端的請求建立一個session的時候,服務器首先檢查這個客戶端裏的請求裏是否已包含了一個session標識--sessionID,若是已經包含一個sessionID,則說明之前已經爲此客戶端建立過session,服務器就按照sessionID把這個session檢索出來使用(檢索不到,可能會新建一個),若是客戶端請求不包含sessionID,則爲此客戶端建立一個session而且聲稱一個與此session相關聯的sessionID,sessionID的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個sessionID將被在本次響應中返回給客戶端保存。
保存sessionID的方式
1,使用cookie:通常這個cookie的名字都是相似於XSESSIONID
如:JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 ---名字就是JSESSIONID
2,URL重寫:由於cookie能夠被人爲禁止,因此爲了保證sessionID可以被傳遞給服務器,使用URL重寫也是一種解決方法。
如:
http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
兩種寫法都行。
session、cookie的區別
1,cookie數據存放在客戶的瀏覽器(本地),session數據放在服務器上;
2,cookie不是很安全,別人能夠分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用session;
3,session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能,考慮到減輕服務器性能方面,應當使用cookie;
4,單個cookie保存的數據不能超過4k,不少瀏覽器都限制一個站點最多保存20個cookie;
5,能夠將重要信息存放爲session。