cookie和session入門
cookie
什麼是cookie
在瀏覽網站的時候,WEB 服務器會先送一小小資料放在你的計算機上,Cookie 會幫你在網站上所打的文字或是一些選擇都紀錄下來。當下次你再光臨同一個網站,WEB 服務器會先看看有沒有它上次留下的 Cookie 資料,有的話,就會依據 Cookie裏的內容來判斷使用者,送出特定的網頁內容給你。
原理
- 服務器創建cookie對象,把會話數據存儲到cookie對象中。
- new Cookie(“name”,”value”);
- 服務器發送cookie信息到瀏覽器
- response.addCookie(cookie);
瀏覽器得到服務器發送的cookie,然後保存在瀏覽器端。
瀏覽器在下次訪問服務器時,會帶着cookie信息
- 服務器接收到瀏覽器帶來的cookie信息
- request.getCookies();
一些細節
- Cookie數據類型只能保存非中文字符串類型。可以保存多個cookie,但是瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制爲4KB。
- 可以通過setPath(java.lang.String uri)和setMaxAge(int expiry)來設置cookie的有效訪問路徑和cookie的有效時間。
Session
什麼是Session
session機制是一種服務器端的機制,服務器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。
原理
當程序需要爲某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識(稱爲session id),如果已包含則說明以前已經爲此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則爲此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。
保存這個session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發揮給服務器。一般這個cookie的名字都是類似於SEEESIONID。但cookie可以被人爲的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞迴服務器。
常見應用
- 用戶登錄
- URL重寫: 把session id直接附加在URL路徑的後面
- 表單隱藏字段: 服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞迴服務器
Cookie和Session區別
典型區別
1、cookie採用的是在客戶端保持狀態的方案,因此數據存放在客戶的瀏覽器上,而session採用的是服務端保持狀態的方案,因此數據放在服務器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙。 考慮到安全應當使用session。
3、session會在一定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能。考慮到減輕服務器性能方面,應當使用COOKIE。
4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。
總結
將登陸信息等重要信息存放爲SESSION
其他信息如果需要保留,可以放在COOKIE中