Java開發中Session和Cookie都有哪些區別?

1.背景介紹跨域

什麼是Cookie瀏覽器

Cookie 是在HTTP協議下,服務器或腳本能夠維護客戶工做站上信息的一種方式。Cookie 是由 Web服務器保存在用戶瀏覽器(客戶端)上的小文本文件(內容一般通過加密),它能夠包含有關用戶的信息。不管什麼時候用戶連接到服務器,Web站點均可以訪問Cookie 信息,能夠看做是瀏覽器緩存。緩存

什麼是Session安全

Session的定義很抽象,在不一樣的場合中session一詞的含義也很不相同.它能夠表明服務器與瀏覽器的一次會話過程,指從一個瀏覽器窗口打開到關閉的這個期間.也能夠用於指一類用來在客戶端與服務器之間保持狀態的解決方案.服務器

2.知識剖析cookie

Cookie機制session

Cookie須要解決三個問題:分發、內容和使用。dom

cookie的分發是經過擴展HTTP協議來實現的,服務器端經過在HTTP的響應由中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。jsp

cookie的內容主要包括name(名字)、value(值)、maxAge(失效時間)、path(路徑),domain(域)和secure性能

name:cookie的名字,一旦建立,名稱不可更改。

value:cookie的值,若是值爲Unicode字符,須要爲字符編碼。若是爲二進制數據,則須要使用BASE64編碼.

maxAge:cookie失效時間,單位秒。若是爲正數,則該cookie在maxAge後失效。若是爲負數,該cookie爲臨時cookie,關閉瀏覽器即失效,瀏覽器也不會以任何形式保存該cookie。若是爲0,表示刪除該cookie。默認爲-1

path:該cookie的使用路徑。若是設置爲"/sessionWeb/",則只有ContextPath爲「/sessionWeb/」的程序能夠訪問該cookie。若是設置爲「/」,則本域名下ContextPath均可以訪問該cookie。

domain:域.能夠訪問該Cookie的域名。第一個字符必須爲".",若是設置爲".google.com",則全部以"google.com結尾的域名均可以訪問該cookie",若是不設置,則爲全部域名

secure:該cookie是否僅被使用安全協議傳輸。

cookie的使用是由瀏覽器按照必定的原則在後臺自動發送給服務器。瀏覽器檢查全部存儲的cookie,若是某個cookie所聲明的做用範圍大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上發送給服務器.

Session機制

Session機制是一種服務端的機制,服務器使用一種相似散列表的結構來保存信息。當程序須要爲某個客戶端的請求建立一個session的時候,服務器首先檢查這個客戶端裏的請求裏是否已包含了一個session標識--sessionID,若是已經包含一個sessionID,則說明之前已經爲此客戶端建立過session,服務器就按照sessionID把這個session檢索出來使用(檢索不到,可能會新建一個),若是客戶端請求不包含sessionID,則爲此客戶端建立一個session而且聲稱一個與此session相關聯的sessionID,sessionID的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串(服務器會自動建立),這個sessionID將被在本次響應中返回給客戶端保存。

保存sessionID的方式

1,使用Cookie.此時Cookie再也不用做認證,只是做爲載體,存儲sessionID

2,URL重寫:由於cookie能夠被人爲禁止,因此爲了保證sessionID可以被傳遞給服務器,使用URL重寫也是一種解決方法。

如,href="<%=response.encodeURL("index.jsp") %>"

寫好後URL是這樣的

href="index.jsp;jsessionid=0CCD096E7F8D97B0BE608AFDC3E1931E"

3, 隱藏表單提交.將sessionId放在隱藏表單中

實際上這幾種方式最方便的仍是cookie,其餘兩種方式都各有弊端,URL重寫的弊端是要對全部的URL都重寫,很是繁瑣.表單隱藏字段的弊端是隻能侷限於表單提交,若是是單純的文本連接則不能提供會話跟蹤

Cookie和Session之間的區別:

1.Cookie數據存放在客戶的瀏覽器(本地),session數據放在服務器上;

2.Cookie不如session安全,別人能夠分析存放在本地的Cookie並進行Cookie欺騙,因此出於安全性的考慮應當使用Session;

3.Session會在必定時間內保存在服務器上。當訪問增多,會佔用較多的服務器資源,因此出於性能考慮則應當使用cookie;

單個cookie保存的數據不能超過4k,不少瀏覽器都限制一個站點最多保存20個cookie.實際上爲了性能考慮,不管是cookie仍是session,其中的信息都應當短小精悍,session由於是保存在服務器上,因此不支持跨域的訪問。

擴展思考

使用cookie和session的具體場景

通常來講,登錄驗證信息,客戶的私人信息,如姓名,電話等,應該放在Session中.Cookie則用於用戶登錄網站時的自動登錄以及相似"購物車"的處理.使用Cookie保存信息時最好經過加密形式來保存數據,同時是否保存登錄信息,須要由用戶自行選擇。

相關文章
相關標籤/搜索